복붙노트

[SPRING] 많은 관계를 설정하거나 목록을 최대 절전 모드로 전환 하시겠습니까?

SPRING

많은 관계를 설정하거나 목록을 최대 절전 모드로 전환 하시겠습니까?

나는 자바 콩에서 많은 관계를 가지고있다. 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'
...

세트를 사용할 때 모든 것이 잘 작동하는 것 같습니다.

논리적 인 컨셉리스트 또는 세트 (목록이 중복되어있을 수 있고 설정 되었기 때문에 성능 및 기타 이슈들에 대해) 때문에 많은 관계를 사용할 많은 관계를 사용할 때 묻고 싶습니다.

해결법

  1. ==============================

    1.관계형 데이터베이스 관점에서 이것은 집합입니다. 데이터베이스는 순서를 보존하지 않고 List를 사용하는 것은 의미가 없으므로 소위 인덱싱 된 컬렉션을 사용하지 않는 한 그 순서는 지정되지 않습니다.

    관계형 데이터베이스 관점에서 이것은 집합입니다. 데이터베이스는 순서를 보존하지 않고 List를 사용하는 것은 의미가 없으므로 소위 인덱싱 된 컬렉션을 사용하지 않는 한 그 순서는 지정되지 않습니다.

    집합을 사용하면 성능에 큰 영향을 미칩니다. List가 사용될 때, Hibernate는 PersistentBag 콜렉션을 사용하는데, 그 밑에는 끔찍한 특징이있다. 예 : 새로운 관계를 추가하면 먼저 기존 관계를 모두 삭제 한 다음 다시 삽입하고 새 관계를 삽입합니다. Set을 사용하면 새 레코드를 삽입하기 만하면됩니다.

    세 번째 것은 - 하나의 엔티티에 여러 개의 List를 가질 수 없기 때문에 악의적 인 경우 여러 개의 bag 예외를 동시에 가져올 수 없습니다.

    참조 :

  2. ==============================

    2.Set의 고유성 요구 사항은 어떻습니까? 이것은 Hibernate가 컬렉션에 추가 될 때마다 새로 추가 된 객체가 유일하다는 것을 확인하기 위해 모든 객체를 검색하도록 강제하지 않습니까? 목록에는이 제한이 없습니다.

    Set의 고유성 요구 사항은 어떻습니까? 이것은 Hibernate가 컬렉션에 추가 될 때마다 새로 추가 된 객체가 유일하다는 것을 확인하기 위해 모든 객체를 검색하도록 강제하지 않습니까? 목록에는이 제한이 없습니다.

  3. from https://stackoverflow.com/questions/8174667/hibernate-many-to-many-relations-set-or-list by cc-by-sa and MIT license