2010-08-02 1 views
4

나는 사용자 이름별로 사용자 목록을 반환하기 위해 Hibernate QBE (사실, Spring의 HibernateTemplate.findByExample())를 사용하려고합니다. "잘 알려진"값을 사용하여 검색합니다 (사용자 이름 "JOHN.SMITH"가 데이터베이스에 있음).HibernateTemplate findByExample은 결과를 반환하지 않습니다.

불행히도 결과가 없습니다. 아래는 단위 테스트입니다.

@Test 
public void testQueryByExample() { 

    User qbeUser = new User(); 
    qbeUser.setUsername("JOHN.SMITH"); 

    List<User> userList = userDao.queryByExample(qbeUser); 
    Assert.notNull(userList); 
    Assert.isTrue(userList.size() > 0, "List of returned users must not be 0"); 

} 

queryByExample() 메소드는 일반적인 DAO에 정의되어

@SuppressWarnings("unchecked") 
public List<T> queryByExample(T obj) { 
    return getHibernateTemplate().findByExample(obj); 
} 

일 QBE에 필요한 특별한 구성의 어떤 종류가 있습니까?

+0

나는 skaffman의 요청에 따라 Hibernate SQL 로깅을 돌리면 분명 도움이 될 것이다. –

답변

7

내 어리 석음이었습니다.

예제로 사용되는 클래스에는 int 및 boolean (기본 요소)이 있습니다. 이러한 값의 기본값은 0 및 false이므로 쿼리가 실패했습니다.

+5

예, 'findByExample()'은 조건에있는 모든 프리미티브 속성을 포함하지만 값이 null 인 모든 비 프리미티브 속성을 무시합니다. 그러나, Hibernate'Example' 클래스는 더 유연한 criteria 옵션을 가지고 있습니다. http://docs.jboss.org/hibernate/stable/core/reference/en/html/querycriteria.html#querycriteria-examples를 참조하십시오. –

+0

놀라운 의견. 오랜 시간 동안 올바른 문서를 찾기 위해 그들을 찾지 못했습니다. – ashes999

0

그렇지 않으면 스프링 구성 파일을 전달해야합니다. 그렇지 않으면 연결 및 풀링 정보가 어떻게 생깁니 까? @ annotation을 사용하여 클래스 선언 위에 스프링 파일을로드합니다.

+0

Test 클래스에 @ContextConfiguration (locations = "classpath : applicationContext.xml") 으로 주석이 첨부됩니다. 테스트중인 클래스가 성공적으로 주입되고 있습니다. QBE를 사용하지 않는 다른 방법도 좋지만 QBE는 작동하지 않습니다. – Jason

+0

당신은 hibernateTemplate의 findByCriteria 메소드를 사용할 수 있습니다. .. – TaherT