2011-12-12 1 views
1

최대 절전 모드를 잘못 오라클의 기준 API를 사용하여 날짜 범위를 처리 할 것으로 보인다 작동합니다. SQL 질의 자체는 정확 해 보입니다 (Hibernate에서 복사되어 수동으로 실행되었습니다). 그래서,최대 절전 모드 날짜 기준이 실패하지만 HQL은

Clazz<Bar> clazz; 
Date start, end; 

주어진이

List<Bar> bars = sessionFactory.getCurrentSession() 
    .createCriteria(clazz) 
    .add(Restrictions.between("timestamp", start, end)) 
    .list(); 

List<Bar> bars = sessionFactory.getCurrentSession() 
    .createCriteria(clazz) 
    .add(Restrictions.ge("timestamp", start)) 
    .add(Restrictions.le("timestamp", end)) 
    .list(); 

실패하지만,이

작동 6,
List<Bar> bars = sessionFactory.getCurrentSession() 
    .createQuery("from Bar b where b.timestamp > ? and b.timestamp < ?") 
    .setDate(0, start) 
    .setDate(1, end) 
    .list(); 

페일 관찰이다

  1. 리턴 Bar 결과의 수는 동일 (정정)

  2. 하지만 기준에

  3. 가지 경우 Bar와 a List<Foo>는 대략 10x more 01을 반환합니다. 해당 SQL 쿼리보다개체가 없습니다. 모든 추가 Foo 개체는 동일한 복사본입니다.


편집 시도

@Entity 
public class Bar { 

    @Id 
    private String id; 

    @Temporal(TemporalType.TIMESTAMP) 
    private Date timestamp; 

    @ManyToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER) 
    @JoinTable(
     name = "bar_foo", 
     joinColumns = { @JoinColumn(name = "barid") }, 
     inverseJoinColumns = { @JoinColumn(name = "fooid") } 
    ) 
    private List<Foo> params; 
} 
@Entity 
public class Foo { 
    @Id private String id; 
} 
+0

당신이 바 클래스를 게시하시기 바랍니다 수 없습니다. –

+0

포스트 바, 바인딩 및 테이블 – korifey

+0

@ Floradu88, korifey, 'Bar' 게시 됨. JohanSjöberg합니까 [이 질문과 그에 대한 첫 번째 대답] @ –

답변

0

내가 기억 또는이 지금 당장하지만 당신은 뒤에 이론적 근거를 찾아 볼 수 없습니다 여기에있는 예제를 확인 예상되는 행동을 볼 수 있습니다. 이 시도 :

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 
0

쿼리 재 작성하기는

List<Bar> bars = sessionFactory.getCurrentSession() 
.createCriteria(Bar.class) 
.add(Restrictions.ge("timestamp", start)) 
.add(Restrictions.le("timestamp", end)) 
.list(); 

그것은 당신 디 같은 동일합니다 d. 그러나 나는 당신이 그들을 사용하는 것과 같은 어떤 종류의 변수를 본 적이없는 예를 본 적이있다.

또한 HQL(hibernate) timestamp range match는이 Restrictions Between for Date in Hibernate Criteria

편집이이 링크를 확인해야합니다

: http://www.javalobby.org/articles/hibernatequery102/

+0

답변 해 주셔서 감사합니다. 차이는 없습니다. 범위 쿼리가 작동하는 것처럼 보이지만 최대 절전 모드로 결과를 어셈블하지 않습니다. –

+0

두 번째 링크에서 대답 –

+0

ty를 시도해보십시오. 결과의 올바른 * 번호 *를 얻었지만 이미 –