我的 Java bean 有多对多的关系。当我使用 List
来定义我的变量时:
@Entity
@Table(name="ScD")
public class Group extends Nameable {
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.EAGER)
@JoinColumn(name="b_fk")
private List<R> r;
//or
private Set<R> r;
我得到了那个错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0'
...
当我使用 Set
时,一切似乎都运行良好。
我想问一下,当使用多对多关系时,哪个用于逻辑概念 List
或 Set
(因为列表可能有重复和设置,但那又如何呢?性能和其他问题)?
最佳答案
从关系数据库的角度来看,这是一个集合。数据库不保留顺序,使用 List
毫无意义,其中的顺序未指定(除非使用所谓的索引集合)。
使用 Set
对性能也有很大影响。当使用 List
时,Hibernate 在下面使用 PersistentBag
集合,该集合具有一些可怕的特性。即:如果您添加新关系,它将首先删除所有现有关系,然后将它们插入回+您的新关系。使用 Set
它只是插入新记录。
第三件事 - 你不能在一个实体中拥有多个 List
,因为你会得到臭名昭著的cannot同时获取多个包异常。
另见:
关于java - hibernate 多对多关系集或列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8174667/