2011-02-01 51 views
1

我有通过@ManyToMany annotaion持有其他对象的集合的域对象:Hibernate重新编写多次到多次?

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

在连接表我持有额外的数据列。

我注意到,当我与持有列表中的对象的工作,并调用setBsList()数据我曾在其他列被删除。每次 不休眠重新写在连接表中的行?

回答

1

在连接表我持有额外的数据列。

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

+0

是的,我知道这是不是一个“合法”的连接表,但没有映射连接表,除了以上。 hibernate是否可以识别这些附加字段,从而确定这些行为还是hibernate始终执行这些重写? – 2011-02-01 15:06:25

1

你不应该打电话setBsList(),你应该直接修改getBsList()否则Hibernate没有办法跟踪改变了什么。

加载时,您得到的是实际的List是一个Hibernate特定的实现,它处理延迟加载并跟踪添加和删除的内容,以便它可以正确更新。如果你有一个不同的列表实现替换此将删除旧的和只添加,然后只添加新条目。当集合中使用Hibernate的,这是一个好主意,以保护,所以你可以不小心做到这一点的制定者。