我有以下(简单)映射:
@Entity
public class Role {
@OneToMany( fetch = FetchType.EAGER ) private Set< Privilege > privileges;
}
我想做以下(简化):
Role
(R1)与Privilege
实体(P1)因此,当创建新的R2时,它的权限集也是新的(HashSet not PersistedSet),但它包含现有的P1;似乎 Hibernate无法识别P1已经存在并且正确地保持关系的事实
我已经已经尝试跟随:
entityManager.persist
和entityManager.merge
我还没试过(还):
@JoinColumn( name = "PRIV_ID" )
我认为这是一个非常标准的用例,所以也许我错过了阻止我正确保持这种关联的东西。 有任何想法吗? 谢谢。
答案 0 :(得分:1)
如果两个角色可能具有相同的权限,那么它不再是OneToMany,而是ManyToMany。首先,请更改privileges
集合的映射。
然后向我们展示将P1添加到R2的特权集的代码。我怀疑您正在创建一个新的Privilege实例,而不是从会话中获取P1。
答案 1 :(得分:0)
OneToMany意味着特权具有反向链接(通过外键) - 也属于一个且仅属于一个角色,并且不能属于两个角色。您需要多对多才能实现目标