2010-08-02 2 views
4

Я пытаюсь использовать Hibernate QBE (фактически, Spring's 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' имеет более гибкие критерии. См. Http://docs.jboss.org/hibernate/stable/core/reference/en/html/querycriteria.html#querycriteria-examples. –

+0

Удивительный комментарий. Я долго искал нужные документы и не мог их найти. – ashes999

0

вы должны передать файл конфигурации весны, иначе как он получит соединение и информацию о пуле. Используйте @ аннотацию для загрузки файла весны над объявлением класса.

+0

Класс Test аннотируется @ContextConfiguration (locations = "classpath: applicationContext.xml") Испытуемый класс успешно вводится. Мои другие методы, которые не используют QBE, прекрасны, но QBE не работает. – Jason

+0

для запроса критериев вы можете использовать метод findByCriteria hibernateTemplate .. – TaherT

Смежные вопросы