0
我在更新多对多表时遇到了一个问题。保存工作正常,但不更新。更新时,它会删除旧记录,但新记录不会被插入。休眠ManytoMany @JoinTable更新问题
只是有关表的简要介绍:
父表 - MainTable
路表 - LK(LK具有FK_Type其是另一个查找)
多对多 - 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);
任何帮助表示赞赏。预先感谢您
设置程序MainTable.setLookups()是否重用您之前清除的集合?或者它将参数分配给该字段? – Brian
它不重用先前清除的集合。我为它分配一个新的集合对象。 – Viswa
尝试重新使用该集合。 Afaik在加载实体时由Hibernate提供的集合对象是某个PersistentCollection,它在会话中被监视。所以我建议添加所有元素而不是“扔掉”。 – Brian