Hibernate Many to Many Relations Set Or List?

20,820

Solution 1

From relational databases perspective this is a set. Databases do not preserve order and using a List is meaningless, the order in them is unspecified (unless using so called indexed collections).

Using a Set also has great performance implications. When List is used, Hibernate uses PersistentBag collection underneath which has some terrible characteristics. I.e.: if you add a new relationship it will first delete all existing ones and then insert them back + your new one. With Set it just inserts the new record.

Third thing - you cannot have multiple Lists in one entity as you will get infamous cannot simultaneously fetch multiple bags exception.

See also:

Solution 2

How about the uniqueness requirement from Set? Doesn't this force Hibernate to retrieve all objects each time one is added to the collection to make sure a newly added one is unique? A List wouldn't have this limitation.

Share:
20,820
kamaci
Author by

kamaci

Updated on March 21, 2020

Comments

  • kamaci
    kamaci about 4 years

    I have a many to many relationship at my Java beans. When I use List to define my variables as like:

    @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;
    

    I get that error:

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0'
    ...
    

    When I use Set everything seem to work well.

    I want to ask that when using many to many relationships which one to use for logical consept List or Set (because of list may have duplicates and set but what about performance and other issues)?