以下是导致问题的序列:
我很困惑:
请赐教:)
谢谢 !
axt*_*avt 10
JPA规范说:
应用于实体X 的合并操作的语义如下:
如果X是分离的实体,则将X的状态复制到具有相同标识的预先存在的管理实体实例X'上,或者创建X的新管理副本X'.
如果X是新的实体实例,则创建新的管理实体实例X',并且将X的状态复制到新的管理实体实例X'中.
如果X是已删除的实体实例,
IllegalArgumentException则合并操作将抛出一个 (或者事务提交将失败).如果X是一个托管实体,它将被合并操作忽略,但是,如果这些关系已使用级联元素值
cascade=MERGE或cascade=ALL注释进行注释,则合并操作将级联到由X的关系引用的实体.对于具有级联元素值的X的关系所引用的所有实体Y,
cascade=MERGE或者cascade=ALLY被递归地合并为Y'.对于由X引用的所有这样的Y,X'被设置为引用Y'.(注意,如果管理X,那么X与X'是同一个对象.)如果X是合并到X'的实体,并且引用另一个实体Y,其中
cascade=MERGE或未cascade=ALL指定,则从X'导航相同的关联产生对具有与Y相同的持久标识的被管理对象Y'的引用.
如你所见,这里没有魔力.已分离实例的状态将复制到新创建的托管实例中.由于您的分离实例有一个空列表,因此托管实例也会拥有它.
进一步的行为取决于关系的所有权,因为数据库中的表示反映了关系的拥有方:
Team是拥有方,那么Team和/ 之间Player的关系将在冲洗期间被破坏(但Player除非你有orphanRemoval = true你的关系,否则它本身就会存在).Team不会影响数据库.如果在刷新Team上下文之前刷新,则所有属性Team都将由数据库中的值重写,因此Player将恢复s 列表(因为尚未刷新空的列表).
如果在调用flush()之前调用refresh(),并且Team是拥有方,则列表将为空,因为关系的破坏在期间传播到数据库flush().
| 归档时间: |
|
| 查看次数: |
5699 次 |
| 最近记录: |