Hibernate ManytoMany @JoinTable更新问题

时间:2015-07-20 16:31:04

标签: java spring hibernate

我在更新多对多表时遇到问题。保存工作正常但不更新。更新时,它会删除旧记录,但不会插入新记录。

关于表格的简短介绍:

父表 - 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);

任何帮助表示赞赏。提前谢谢

1 个答案:

答案 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将不会创建任何行。

谢谢你们提出的所有建议。