【发布时间】:2012-03-16 19:10:19
【问题描述】:
我有以下(简单)映射:
@Entity
public class Role {
@OneToMany( fetch = FetchType.EAGER ) private Set< Privilege > privileges;
}
我想做以下事情(简化):
- 我创建了一个带有
Privilege实体 (P1) 的Role(R1) - 我想创建另一个新角色 (R2) 并赋予它相同的权限 (P1)
所以,当新的 R2 创建时,它的 Set of Privilege 也是新的(HashSet 不是 PersistedSet)但它包含现有的 P1; Hibernate 似乎无法识别 P1 已经存在的事实并正确地保持关系
我已经尝试过关注:
- 使用
entityManager.persist和entityManager.merge保存新角色(R2) - 将 cascade = { CascadeType.ALL } 添加到 Role 和 Privilege 之间的映射中
- 尝试在保存新角色之前预加载权限(以便实体存在于当前会话中)
我还没有尝试过(还):
- 在映射上指定
@JoinColumn( name = "PRIV_ID" ) - 手动执行更多操作(例如首先保留空的 Role 实体,然后更新 Privileges)- 最后的手段
我认为这是一个非常标准的用例,所以也许我遗漏了一些阻止我正确保持这种关联的东西。 有任何想法吗? 谢谢。
【问题讨论】:
标签: java hibernate jpa orm one-to-many