Hibernate使用OrphanRemoval触发约束冲突

Hibernate使用OrphanRemoval触发约束冲突,第1张

Hibernate使用OrphanRemoval触发约束冲突

一些说明:

  • 由于您具有双向关联,因此需要添加一个
    mappedBy
    属性来声明关联的拥有方。
  • 同样不要忘记,在使用双向关联时,您需要管理链接的两端,我建议为此使用防御性方法(如下所示)。
  • 你必须实现
    equals
    hashCode
    Contact

因此,在中

Account
,像这样修改映射:

@Entitypublic class Account {    @Id @GeneratedValue    public Long id;    @oneToMany(cascade = CascadeType.ALL, mappedBy = "account", orphanRemoval = true)    public List<Contact> contacts = new ArrayList<Contact>();    public void addToContacts(Contact contact) {        this.contacts.add(contact);        contact.setAccount(this);    }    public void removeFromContacts(Contact contact) {        this.contacts.remove(contact);        contact.setAccount(null);    }    // getters, setters}

在中

Contact
,重要的部分是该
@ManyToOne
字段应将
optional
标志设置为
false

@Entitypublic class Contact {    @Id @GeneratedValue    public Long id;    @ManyToOne(optional = false)    public Account account;    // getters, setters, equals, hashCode}

通过这些修改,以下内容将起作用:

Account account = new Account();Contact contact = new Contact();account.addToContact(contact);em.persist(account);em.flush();assertNotNull(account.getId());assertNotNull(account.getContacts().get(0).getId());assertEquals(1, account.getContacts().size());account.removeFromContact(contact);em.merge(account);em.flush();assertEquals(0, account.getContacts().size());

和孤立的孤儿

Contact
被删除,按预期方式。使用Hibernate 3.5.3-Final测试。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5012668.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存