2012-11-14 3 views
1

나는 Hibernate에서 새로운 것이지만, @Batchsize 주석 작업에 대한 질문이있다. 나는 그것이 어떻게 작동 하는지를 이해하지만 select를위한 엔티티 ID를 어떻게 그룹화하는지 이해하지 못한다. 예를 들면 - 저는 Car와 Wheel의 두 클래스를 가지고 있습니다. 자동차에는 휠 목록이 있으며 비어 있어야합니다. 나는 10 대의 자동차를 만든다. 그 중 5 대는 휠리스트가 있고 5 대는 그렇지 않다.Hibernate에 관해서 Batchsize ordering

Hibernate: 
select 
    wheels0_.car_id as car3_1_, 
    wheels0_.id as id1_, 
    wheels0_.id as id0_0_, 
    wheels0_.title as title0_0_ 
from 
    Wheel wheels0_ 
where 
    wheels0_.car_id in (
     ?, ?, ?, ?, ? 
    ) 
17:50:35,505 TRACE LongType:151 - binding '25' to parameter: 1<br> 
17:50:35,505 TRACE LongType:151 - binding '18' to parameter: 2<br> 
17:50:35,505 TRACE LongType:151 - binding '17' to parameter: 3<br> 
17:50:35,506 TRACE LongType:151 - binding '20' to parameter: 4<br> 
17:50:35,506 TRACE LongType:151 - binding '23' to parameter: 5<br> 

을하지만, 다음에 내가 다른 바인딩을 얻을 : 그럼 난 내 콘솔에서이 같은 내용이 그 후 간단한 코드

List<Car> cars = session.createQuery("from Car").list(); 
    for (Car car : cars) { 
     List<Wheel> wheels = car.getWheels(); 
     for (Wheel wheel : wheels) { 
      System.out.println(wheel.getTitle()); 
     } 
    } 

를 실행합니다. 1, 15, 23 등이 될 수 있습니다. 하지만 나는 잘못 이해했다 - 어떻게 IN 절의 최대 절전 모드를 선택 하는가? ASC 또는 DESC에 의해 주문되지 않은 이유 (예 : 1, 2, 3, 4, 5)?

답변

1

자동차 목록이 채워진 순서입니다. id에 의해 오름차순으로 주문하려는 경우 다음과 같이 할 수 있습니다. List<Car> cars = session.createQuery("from Car order by id asc").list();

0

자동차의 순서가 궁금한 경우 원래 검색어를 수정하여 order by 절을 추가하기 만하면 자동차를 반복 할 수 있습니다. 순서대로.

각 목록의 휠 순서가 염려되는 경우 (예 : Car1.getWheels()의 경우 휠 1이 휠 2보다 먼저 와야 함) BatchSize는 정렬 옵션을 제공하지 않습니다. Wheel 클래스를 Comparable으로 만들고 getSortedWheels()와 같은 편리한 메소드를 추가하는 것을 고려하십시오.

public List<Wheel> getSortedWheels() { 
    List<Wheel> wheels = getWheels(); 
    Collections.sort(wheels); 
    return wheels; 
}