#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);