где на любом поле в спящем режиме - PullRequest
1 голос
/ 20 сентября 2011

У меня есть следующий объект:

Agency

Name
Description

Я хотел бы вернуть объект гибернации, если текст "большой" появляется в любом из полей.

Есть ли лучший способ, чем SQL-запрос: select distinct id from agency where name like 'big' or description like 'big' в спящем режиме?

РЕДАКТИРОВАНИЕ:

Я предпочитаю написать общее решение для класса - этот hibernate может проверять любые поля без указания их

Ответы [ 2 ]

2 голосов
/ 20 сентября 2011
Criteria criteria = sess.createCriteria(Agency.class)
    for (Field f : Agency.class.getDeclaredFields())
    {
        if(f.isAccessible()) {
            criteria.add(Restrictions.like(f.getName(), "%big%"));
        }
    }
List agencies =   criteria.list();

Если вы аннотируете классы, вы можете прочитать имя.

Для этого имена полей должны соответствовать столбцам.Но вы можете сделать их заглавными.

1 голос
/ 20 сентября 2011

Критерий запроса

List agencies = sess.createCriteria(Agency.class)
    .add( Restrictions.like("Name", "%big%") )
    .add( Restrictions.like("Description", "%big%") )
    .list();

Или вам может понадобиться Или, в зависимости от того, что вы хотите:

List agencies = sess.createCriteria(Agency.class)
    .add( Restrictions.or(
        Restrictions..like("Name", "%big%"),
        Restrictions.like("Description", "%big%")
     ) )
    .list();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...