保存不适用于连接表列

时间:2013-04-29 06:10:47

标签: hibernate

我无法理解为什么会发生这种情况我保存了一个新实体,它保存了所有列但没有连接表列,也没有为了保存新实体而给出下面给出的异常抛出代码..

newEntity=setPropsFromTransientFields(newEntity,"newEntity");
sess.save(newEntity);

但是当我尝试更新exixting记录时,它会成功保存连接表列

persistedEntity=setPropsFromTransientFields(persistedEntity,"updateEntity");
sess.saveOrUpdate(persistedEntity);

加入下面的表格映射

@ManyToMany(targetEntity=TechnologyProduct.class)
    @JoinTable(
        name = "contact_technology",
        joinColumns = @JoinColumn(name="contact_id", referencedColumnName="id"),
        inverseJoinColumns = @JoinColumn(name="technology_id", referencedColumnName="id")
    )
    public List<TechnologyProduct> getTechKeywords() {
        return techKeywords;
    }

1 个答案:

答案 0 :(得分:0)

默认情况下,Hibernate不会尝试执行任何级联操作。所以如果你有实体

class E{
   List<X> xes;
}

然后您负责正确处理关系xes。那就是你需要确保X实体保存在DB中。您也可以配置级联保存,然后Hibernate将自行处理这个问题。

您的更新按预期工作,因为相关对象(我的示例中为X)之前已添加到Hibernate Session中,Hibernate会自动跟踪其更改并执行所有必要的数据库操作。这是我的猜测,因为我无法看到如何从DB读取对象。