一些说明:
- 由于您具有双向关联,因此需要添加一个
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测试。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)