Hibernate会重写多个条目吗?

时间:2011-02-01 14:58:20

标签: java hibernate

我有一个域对象,它通过@ManyToMany注释保存另一个对象的集合:

@ManyToMany(fetch=FetchType.LAZY,cascade = { CascadeType.MERGE, CascadeType.PERSIST})
    @JoinTable(name = "join_table", joinColumns=@JoinColumn(name="a_id", referencedColumnName = "a_id"), inverseJoinColumns=@JoinColumn(name = "b_id", referencedColumnName = "b_id"))
    private List<B> BsList;

在联接表中,我保留了其他数据列。

我注意到当我使用保存列表的对象并调用setBsList()时,我删除了附加列中的数据。 Hibernate每次都会在连接表中重写行吗?

2 个答案:

答案 0 :(得分:1)

  

在联接表中,我保留了其他数据列。

如果您有其他数据列,则是一个连接表。这是一张有两个FK的桌子,也可以是PK。而Hibernate正在做正确的事情。因此,您应该创建另一个表示此“伪连接表”的实体,并相应地映射它。

答案 1 :(得分:1)

你不应该致电setBsList(),你应该直接修改getBsList(),否则Hibernate无法跟踪发生了什么变化。

加载时,您获得的实际List是一个特定于Hibernate的实现,它处理延迟加载并跟踪添加和删除的内容,以便可以正确更新。如果用不同的列表实现替换它,它将删除旧的列表,只添加然后只添加新条目。当Hibernate与集合一起使用时,最好让setter受到保护,这样你就不会意外地做到这一点。