Java 如何在hibernate中编写搜索查询
我试图在hibernate中编写一个搜索查询。我从OpenMeeting源代码获得了帮助。 所以我的问题是:Java 如何在hibernate中编写搜索查询,java,hibernate,search,Java,Hibernate,Search,我试图在hibernate中编写一个搜索查询。我从OpenMeeting源代码获得了帮助。 所以我的问题是: public User getAllUser(String search) { String[] searchItems = search.split(" "); try { String sqlQuery = "SELECT * FROM USER u " + "WHERE u.deleted = 1 "; sqlQuery += "A
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;
}
公共用户getAllUser(字符串搜索){
字符串[]searchItems=search.split(“”);
试一试{
String sqlQuery=“SELECT*FROM USER u”+“其中u.deleted=1”;
sqlQuery+=”和(“;
for(int i=0;i
上面说有一个意外的标记,但我没有找到它在哪里
所以我有两个问题:
这不是hibernate查询。它是本机SQl。您应该使用createSQLQuery,如下所示
Query query = sessionFactory.getCurrentSession().createSqlQuery(
sqlQuery);
请参阅选择使用hibernate
另外,我建议您使用这不是hibernate查询。它是本机SQl。您应该使用createSQLQuery,如下所示
Query query = sessionFactory.getCurrentSession().createSqlQuery(
sqlQuery);
请参阅选择使用hibernate
另外,我建议你去看看这一切看起来都很复杂和不整洁。您考虑过使用Hibernate搜索吗?它的设计目的是让这样的查询变得简单。这一切看起来都非常复杂和不整洁。您考虑过使用Hibernate搜索吗?它的设计目的是让这样的查询变得简单明了。您可以使用:
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"));
您可以使用:
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"));
阅读文档和javadoc怎么样?您是否每次都会遇到此错误,或者它是在特定的搜索字符串中发生的?你能举一个导致错误的SQL输出的例子吗?嘿@perissf我没有得到它…嘿@Digbyswift我解决了它。我使用createSqlQuery方法解决了这个问题。我在看如何使用标准转换它……阅读文档和javadoc怎么样?您是否每次都会遇到此错误,或者它是在特定的搜索字符串中发生的?你能举一个导致错误的SQL输出的例子吗?嘿@perissf我没有得到它…嘿@Digbyswift我解决了它。我使用createSqlQuery方法解决了这个问题。我在寻找如何使用条件转换它…我在考虑使用hibernate搜索,但hibernate搜索是为全文搜索而设计的,到目前为止我知道。。现在我不需要全文搜索,这是公平的。我刚才评论说,您试图在代码中执行的操作是Hibernate Search的设计目标。我曾想过使用Hibernate Search,但到目前为止,Hibernate Search是为全文搜索而设计的。。现在我不需要全文搜索,这是公平的。我刚才评论说,您试图在代码中执行的操作是Hibernate搜索的设计目标。