Hibernate多对多关系集或列表?

kam*_*aci 24 java spring hibernate list set

我的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;
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0'
...
Run Code Online (Sandbox Code Playgroud)

当我使用Set一切似乎运作良好.

我想问一下,当使用多对多关系时,哪一个用于逻辑概念ListSet(因为列表可能有重复和设置,但性能和其他问题怎么样)?

Tom*_*icz 60

从关系数据库的角度来看,这是一个集合.数据库不保留顺序并且使用a List是无意义的,它们中的顺序是未指定的(除非使用所谓的索引集合).

使用a Set也有很大的性能影响.当List使用时,Hibernate使用PersistentBag下面的集合,它具有一些可怕的特性.即:如果你添加一个新的关系,它将首先删除所有现有的关系,然后将它们插回+你的新关系.有了Set它只是插入一个新记录.

第三件事 - 你不能List在一个实体中拥有多个s因为你会得到臭名昭着的不能同时获取多个包的例外.

也可以看看:

  • 投票接受作为详细信息和良好链接的答案. (3认同)