1. 程式人生 > >Hibernate模糊查詢三種方式

Hibernate模糊查詢三種方式

1、如果是Query query = session.createQuery("")的話,試一下去掉前面的“select *”即createQuery方法內的條件直接是“from ......”,有幾個是可以用的,因為支援部分SQL。

不行的話就用下面的格式(排序必用):   

select OBJECT(o) from A o where o.b in(21,32)
select OBJECT(o) from A o order by o.b ASC 

2、Hibernate中實現模糊查詢,可有以下三種方式:

第一種方式:QBC查詢
String name = "", info = "";
if (sub != null && sub.getSubname() != null) {
  name = sub.getSubname();
}
if (sub != null && sub.getSubinfo() != null) {
  info = sub.getSubinfo();
}
Criteria cr = session.createCriteria(Subject.class);
cr.add(Expression.like("subname","%"+name+"%"));
cr.add(Expression.like("subinfo","%"+info+"%")); 

第二種方式:HQL查詢語句
String hql = "from Subject as s where s.subname like :name and s.subinfo like :info";
// 呼叫session的獲得資料列表方法,傳遞HQL查詢語句
   Query query = session.createQuery(hql);
   query.setString("name","%"+name+"%");
   query.setString("info","%"+info+"%");
   System.out.println("*********"+hql); 

第三種方式:HQL查詢語句(查詢條件只能為英文或數字,漢字在傳遞到hibernate內部時出現亂碼問題


String hql = "from Subject as s where s.subname like '%"+name+"%' and s.subinfo like '%"+info+"%'";
//呼叫session的獲得資料列表方法,傳遞HQL查詢語句
Query query = session.createQuery(hql); 

注:Subject為資料庫表subject對映的類;它有相應的屬性subname、subinfo及相應的get和set方法;sub為Subject的一個例項化物件。