Как написать поисковый запрос в спящем режиме - PullRequest
1 голос
/ 31 января 2012

Я пытался написать поисковый запрос в спящем режиме. Я получил помощь из открытого кода исходного собрания. Итак, мой запрос:

public User getAllUser(String search) {
    String[] searchItems = search.split(" ");
    try {
        String sqlQuery = "SELECT * FROM  USER u " + "WHERE u.deleted = 1 ";
        sqlQuery += "AND ( ";
        for (int i = 0; i < searchItems.length; i++) {
            if (i != 0) {
                sqlQuery += " OR ";
            }
            sqlQuery += "( " + "lower(u.last_name) LIKE '"
                    + StringUtils.lowerCase("%" + searchItems[i] + "%")
                    + "' " + "OR lower(u.first_name) LIKE '"
                    + StringUtils.lowerCase("%" + searchItems[i] + "%")
                    + "' " + "OR lower(u.username) LIKE '"
                    + StringUtils.lowerCase("%" + searchItems[i] + "%")
                    + "' " + ") ";
        }
        sqlQuery += " )";

        log.debug("sqlQuery : " + sqlQuery);
        Query query = sessionFactory.getCurrentSession().createQuery(
                sqlQuery);

        return (User) query.list().get(0);

    } catch (HibernateException e) {
        e.printStackTrace();
    }
    return null;
}

Там написано, что есть неожиданный токен, но я не нашел, где он.

Итак, у меня два вопроса:

  1. как сделать его работоспособным.
  2. как написать поисковый запрос с использованием критериев и проекций / ограничений в спящем режиме

Ответы [ 3 ]

3 голосов
/ 02 августа 2013

Вы можете использовать:

    Query query = sessionFactory.getCurrentSession().createQuery("" +
            "select * from OdontogramaDiagnosticoModel where odontologia = :idOdontologia");
    query.setParameter("idOdontologia", "102");
    return query.list();

Здесь продемонстрировано 2 вещи, на которые следует обратить внимание:

Другой пример:

sessionFactory.getCurrentSession().createCriteria(OdontologiaDiagnostico.class)
    .add(Restrictions.eq("diagnosticosClinicos", "test"));
1 голос
/ 31 января 2012

Это не спящий запрос. Это родной SQl. Вы должны использовать createSQLQuery, как показано ниже

Query query = sessionFactory.getCurrentSession().createSqlQuery(
                sqlQuery);

См. это для выбора с использованием гибернации.

Кроме того, я бы предложил вам использовать Критерии

0 голосов
/ 31 января 2012

Все это выглядит очень сложным и неопрятным.Рассматривали ли вы вместо этого поиск Hibernate?Он был разработан для того, чтобы такие запросы были простыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...