我在更新多对多表时遇到问题。保存工作正常但不更新。更新时,它会删除旧记录,但不会插入新记录。
关于表格的简短介绍:
父表 - MainTable
Lk表 - LK(LK具有FK_Type,这是另一个查找)
ManytoMany - Test_Many
TEST_MANY表有三列:
1.FK_MAINID
2.FK_LK_ID
3.FK_LKTYPE
所有三列都是TEST_MANY的PK。第二列和第三列是来自LK表的PK列,第一列是主表中的PK列。
请找到以下代码。
实体:
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.LAZY)
@JoinTable(name = "TEST_MANY", joinColumns = {
@JoinColumn(name = "FK_MAINID", referencedColumnName = "PK_MAINID", nullable = false, updatable = false)},
inverseJoinColumns = {
@JoinColumn(name = "FK_LKID", referencedColumnName = "ID", nullable = false, updatable = false),
@JoinColumn(name = "FK_LKTYPE", referencedColumnName = "FK_TYPE", nullable = false, updatable = false)}
)
private List<LK> lookups;
在DAO:
Session session = this.sessionFactory.getCurrentSession();
MainTable maintable = (MainTable) session.get(MainTable.class, id);
maintable.getLookups().clear;
maintable.setLookups(lookups));
session.merge(maintable);
任何帮助表示赞赏。提前谢谢
答案 0 :(得分:0)
感谢Brian和Dragan。
问题已解决。问题是集合lookups
为空。所以在更新功能中:
Session session = this.sessionFactory.getCurrentSession();
MainTable maintable = (MainTable) session.get(MainTable.class, id);
maintable.getLookups().clear;
maintable.setLookups(lookups));
session.merge(maintable);
首先按预期清除行。然后设置null将不会创建任何行。
谢谢你们提出的所有建议。