栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Hibernate使用OrphanRemoval触发约束冲突

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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测试。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/403532.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号