使用 IndexColumn 从 ManyToMany 中删除
Posted
技术标签:
【中文标题】使用 IndexColumn 从 ManyToMany 中删除【英文标题】:Deleting from ManyToMany with IndexColumn 【发布时间】:2011-02-24 17:00:42 【问题描述】: 报告实体 @ManyToMany @JoinTable(name = "reports_contents_relations", joinColumns = @JoinColumn(name = "report_id"), inverseJoinColumns = @JoinColumn(name = "content_id")) @IndexColumn(name="content_order") 私有列表内容 = new ArrayList(); 某类 公共无效remoteContentFromReport(内容内容) 列表内容 = report.getContents(); 内容.删除(内容); 保存报告);调用remoteContentFromReport 方法时出现以下错误。
java.sql.BatchUpdateException: 删除重复条目 收藏
我不想删除 Content.entity,只想删除连接表中将其与报表相关联的条目。
我错过了什么?
【问题讨论】:
【参考方案1】:您应该能够只调用report.saveOrUpdate()
,它会自动取消链接report.contents
列表中不存在的所有内容(如果所有内容都映射正确)。
因此,获取您的报告,从内容列表中删除不需要的内容条目,然后保存。
【讨论】:
我在 jpa 中使用 spring 的实体管理器,所以我只有合并或持久化。但是在从集合中删除我的项目后,在报告实体上调用合并会引发重复条目错误。 我使用最简单的环境编写了一个非常简单的测试应用程序,它可以按预期工作。因此,我认为这不是 JPA/Hibernate 或映射的问题,但更有可能是我在控制器和 spring 之间编写的抽象层;可能与交易有关。以上是关于使用 IndexColumn 从 ManyToMany 中删除的主要内容,如果未能解决你的问题,请参考以下文章