2012-08-22 2 views
0

주석을 사용하는 이유를 설명 할 수 있습니까 @Fetch(FetchMode.SELECT)Sets 대신 Lists을 사용할 수 있습니까? SUBSELECT과 같은 다른 fetchmode 유형을 사용하면 어떤 차이가 있습니까? 부여 됨으로써 코드의 조각 아래 여기Java Persistence & Hibernate

:

class One{ 
    .. 
    @Fetch(FetchMode.SELECT) 
    @OneToMany(mappedBy="one", fetch = FetchType.EAGER, ...) 
    private List<Something> listOne = new ArrayList<Something>(); 

    @Fetch(FetchMode.SELECT) 
    @OneToMany(mappedBy="one", fetch = FetchType.EAGER, ...) 
    private List<SomethingElse> listTwo = new ArrayList<SomethingElse>(); 
    ... 
} 

이런 식으로는 작동하지만 .... 내가 대안 솔루션을 다른 토론을 찾을 이유를 알고 싶습니다하지만이 하나가 아니라이었다 선호하는 ...

+0

여기 두 가지를 혼합한다고 생각합니다. Hibernate가 레코드 세트를 Java Collection 객체에 매핑하는 방법은 실제로 Fetch 모드와 관련이 없다. 가져 오기 모드는 연결된 레코드를 가져 오는시기와 방법을 결정합니다. 일반적으로 OneToMany 또는 ManyToMany를 List 또는 Set에 매핑 할 수 있습니다. 질의에 ORDER BY를 포함하지 않으면 주문이 고정되어 있다는 착각을 불러 일으키기 때문에 목록이 속일 수 있습니다. 내 머리글의 맨 위에서 Hibernate는 Set에 대해 LinkedHashSet을 사용하므로 순서도 예측할 수 있습니다. – Frans

+0

내게 문제가되지 않습니다. 가끔씩 오래된 라이브러리를 사용하고 있기 때문에 목록이 아닌 세트가 있어야합니다. (목록에서 수동으로 마이그레이션하지 않으려합니다.) ... – user1617013

답변

0

을 사용할 수 있습니다. 컬렉션의 인터페이스로또는 Set을 사용하면 가져 오기와 아무런 관련이 없습니다.

@Fetch(FetchMode.SELECT)fetch = FetchType.EAGER은로드 한 후 One 엔티티가 즉시 두 번째 선택로드 목록을 발행 함을 의미합니다.

제리스트 엘리먼트 (List<SomethingElse>)에 액세스 할 때 (그들은 또한 컬렉션의 일부일 수 있음)의 모든 하나 enitities위한 부속으로 목록을로드 최대 절전 @Fetch(FetchMode.SUBSELECT)fetch = FetchType.EAGER없이 수단.

+0

이것은 내가 필요로하는 .... 고마워!하지만 @Fetch 어노테이션없이리스트의 insetad를 사용하면 어떨까? 나에게 오류를 준다?! – user1617013

+0

아니요, 확인해야합니다. 컬렉션에서 순서를 유지하려는 집합 대신 목록을 사용하고자 할 수 있습니다. 그렇지 않으면 모음에 중복이 없음을 지정하므로 세트가 더 자연 스럽습니다. – dcernahoschi

+0

최대 절전 모드 4.0.0.CR6, 스프링 3.1.1을 사용하고 있습니다 ... @Fetch 주석을 추가하기 전에 내 앱이로드 될 때 오류가 발생했습니다 – user1617013

2

공식적인 문서가 귀하의 질문에 대한 답변을 찾는 가장 좋은 장소라고 생각합니다. 이 link을 살펴보십시오.

SELECT : 각 엔티티, 모음의 선택을 사용하거나 부하 가

JOIN를 조인 : 부속

SUBSELECT를 관련 기관, 모음을로드하거나 결합하는 외부 결합을 사용 subselect 쿼리를 사용하여 추가 모음을로드하십시오.

+0

이 링크는 질문에 대답 할 수 있지만, 여기에 대한 답변의 필수적인 부분과 참조 용 링크를 제공하십시오. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않게 될 수 있습니다. – Jesper

+0

정답이 @davioooh에 의해 답변 된 것처럼 적절한 대답은 실제로 "RTFM"이라고 생각합니다. 두 번째 링크는 자바 개발자에게 가장 친숙한 javadoc에 대한 링크입니다. Stackoverflow는 두 번째 가장 친한 친구입니다. – jpkrohling

+0

나는 당신이 알고있는 것을 말하기보다 최선을 다할 수 있기를 바란다. javadoc이 말한 것을 안다. ... – user1617013

관련 문제