问题描述
请问一下hibernate 多对多删除一方的记录的时候,为什么中间表的记录没有跟着删除呢,但是我在存入的时候,中间表记录就自动生成了啊 问题补充:UserGroup表private Set<Paper> papers = new HashSet<Paper>();@ManyToMany@JoinTable(name="tm_paper_usergroup",joinColumns={@JoinColumn(name="usergroupid")},inverseJoinColumns={@JoinColumn(name="paperid")})public Set<Paper> getPapers() {return papers;}public void setPapers(Set<Paper> papers) {this.papers = papers;}Paper表@ManyToMany(mappedBy="papers")public Set<UserGroup> getUsergroups() {return usergroups;}public void setUsergroups(Set<UserGroup> usergroups) {this.usergroups = usergroups;}关联表自己生成,在删除paper记录的时候,删除失败,报错信息如下 org.springframework.dao.DataIntegrityViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`tomexam2/tm_paper_usergrou`, CONSTRAINT `FKFB613635E7937D05` FOREIGN KEY (`paperid`) REFERENCES `tm_paper` (`id`)); SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`tomexam2/tm_paper_usergrou`, CONSTRAINT `FKFB613635E7937D05` FOREIGN KEY (`paperid`) REFERENCES `tm_paper` (`id`))如果自己创建一张表tm_paper_usergroup 主键id ,usergroupid,paperid,如果这样,在删除paper的时候删除成功,但是关联表tm_paper_usergroup的关联记录还在
解决方案
Hibernate在删除多对多关联时,默认是将关联表中的一方置为空,这样就达到解除关系的目的,顶多是你的数据库表中存在了一些无意义的数据而已,你可以在删除的方法中手动删除关联表中的记录
解决方案二:
http://dreamzhong.iteye.com/blog/1273157