Ошибка sql-запроса в режиме гибернации

#sql #database #hibernate

#sql #База данных #переход в режим гибернации

Вопрос:

ниже приведен запрос:

     Query q = getSession().createQuery("FROM secroles 
                           WHERE secroles.SR_ORG = :srOrg , 
                                 secroles.SR_PROFILE= :srUser, 
                                 ISDELETED=:isDeleted");
  

ошибка:

 org.hibernate.hql.ast.QuerySyntaxException: unexpected token: , near line 1, column 37 [FROM secroles WHERE SR_ORG = :srOrg , SR_PROFILE= :srUser , ISDELETED = :ISDELETED]
  

завершить функцию:

 public String getSecroleByOrgNID(Organization srOrg, Profile srUser){try {
        System.out.println("bug is here0");
        begin();
        Query q = getSession().createQuery("FROM secroles WHERE secroles.SR_ORG = :srOrg , secroles.SR_PROFILE= :srUser , ISDELETED=:isDeleted");
        q.setParameter("srOrg", srOrg);
        q.setParameter("srOrg", srUser);
        q.setBoolean("isDeleted", false);
        Secroles sr = (Secroles) q.uniqueResult();
        Roletable rt = sr.getSrRole();
        commit();
        return rt.getRoleName();
    } catch( HibernateException e ) {
        rollback();
        e.printStackTrace();
        System.out.println("Could not assign rolen Message: " e.getMessage());
    }
return null;

}
  

}

Ответ №1:

Я полагаю, вы поставили , вместо AND .

Также вы должны использовать имена свойств класса, а не имена столбцов. Так что, вероятно, secroles.srOrg вместо secroles.SR_ORG

Комментарии:

1. не работает, выдается ошибка: org.hibernate.hql.ast.QuerySyntaxException: неожиданный токен: , около строки 1, столбец 37 [ИЗ secroles, ГДЕ secroles. srOrg = :SR_ORGsrOrg , secroles. srUser= :SR_PROFILE , ISDELETED = :ISDELETED]

2. Вы уверены, что это та же ошибка? Используете ли вы имена свойств, как я предлагал? Потому что ваши имена выглядят как имена столбцов. Что я предлагаю — присвоите свой запрос переменной и распечатайте его. Затем отправьте вывод с точным сообщением об ошибке.

3. Также, что такое secroles? Это должно быть имя класса.

4. инициализирую переменную равным null, а затем присваиваю переменной запрос и ничего не получаю на выходе.

5. В HQL вы должны говорить на языке классов и свойств. Не таблицы и столбцы. Вместо этого используйте его сопоставленное имя класса и соответствующие свойства.

Ответ №2:

Используйте AND вместо «,» для нескольких предложений. Обратитесь к документации о том, как использовать WHERE предложение: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html

 FROM secroles 
WHERE secroles.SR_ORG = :srOrg AND
      secroles.SR_PROFILE= :srUser AND
      ISDELETED=:isDeleted
  

Ответ №3:

Также вы дважды привязываете один и тот же параметр, используя разные переменные, в соответствии с приведенным выше кодом. Я почти уверен, что это не приведет к тому, чего вы ожидаете.

     q.setParameter("srOrg", srOrg);
    q.setParameter("srOrg", srUser);