我试图在hibernate中编写搜索查询。我从开放式会议源代码中获得了帮助。 所以我的查询:
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;
}
它说有一个意想不到的令牌,但我没有找到它的位置。
所以我有两个问题:
答案 0 :(得分:3)
您可以使用:
Query query = sessionFactory.getCurrentSession().createQuery("" +
"select * from OdontogramaDiagnosticoModel where odontologia = :idOdontologia");
query.setParameter("idOdontologia", "102");
return query.list();
这里展示了两件事你应该注意:
另一个例子:
sessionFactory.getCurrentSession().createCriteria(OdontologiaDiagnostico.class)
.add(Restrictions.eq("diagnosticosClinicos", "test"));
答案 1 :(得分:1)
这不是一个休眠查询。这是一个原生的SQl。您应该使用createSQLQuery,如下所示
Query query = sessionFactory.getCurrentSession().createSqlQuery(
sqlQuery);
请参阅this以选择使用休眠。
另外,我建议您使用Criterias
答案 2 :(得分:0)
这看起来非常复杂和不整洁。您是否考虑过使用Hibernate Search?它旨在使这样的查询变得简单。