Hibernate HQL查询必知

来源:互联网 发布:js重定向url带参数 编辑:程序博客网 时间:2024/05/29 02:16
Sql代码
  1. //HQL-Associations   
  2. String hql = "select s.name, p.name, p.price from Product p inner join p.supplier as s";   
  3. Query query = session.createQuery(hql);   
  4. List results = query.list();  

 

Sql代码
  1. //HQL-Delete  
  2. String hql = "delete from Product where name = :name";   
  3. Query query = session.createQuery(hql);   
  4. query.setString("name","Product 1");   
  5. int rowCount = query.executeUpdate();  

 

Sql代码
  1. //HQL-Function  
  2. String hql = "select min(product.price), max(product.price) from Product product";   
  3. Query query = session.createQuery(hql);   
  4. List results = query.list();  

 

Sql代码
  1. //HQL-Fetch Associations HQL Inner Join  
  2. String hql = "from Supplier s inner join fetch s.products as p";   
  3. Query query = session.createQuery(hql);   
  4. List results = query.list();  

 

Sql代码
  1. //HQL-Named Parameters   
  2. String hql = "from Product where price > :price";   
  3. Query query = session.createQuery(hql);   
  4. query.setDouble("price",2.0);   
  5. List results = query.list();   
  6. String hql = "from Product as product where product.supplier=:supplier";   
  7. Query query = session.createQuery(hql);   
  8. query.setEntity("supplier",supplier);   
  9. List results = query.list();  

 

Sql代码
  1. //HQL-Update  
  2. String hql = "update Supplier set name = :newName where name = :name";   
  3. Query query = session.createQuery(hql);   
  4. query.setString("name","Supplier Name 1");   
  5. query.setString("newName","s1");   
  6. int rowCount = query.executeUpdate();  

 

Sql代码
  1. //HQL-where  
  2. String hql = "from Product where price > 2.0 and name like 'P%'";   
  3. Query query = session.createQuery(hql);   
  4. List results = query.list();  

 

Sql代码
  1. //HQL-Map   
  2. String hql = " select new map(usr.name as userName, usr.password as password) from User usr";   
  3. Query query = session.createQuery(hql);   
  4. List list = query.list();   
  5. Map goods =(Map)list.get(0);  


【注】

Sql代码
  1. String hql = " select new map(usr.name as userName, usr.password as password)   
  2. from com.jason.User usr";   
  3. String hql = " select new map(usr.name as userName, usr.password as password)   
  4. from com.jason.User usr";  

由于from之前的空格,引起unexpected token: from

查询语句可以返回值为任何类型的属性或对象,包括返回类型为某种组件(Component)的属性:

Sql代码
  1. select cust.name.firstName from Customer as cust   
  2. select cat.mate from Cat cat  

 

查询语句可以返回多个对象和(或)属性,存放在 Object[]队列中:

Sql代码
  1. select mother, offspr, mate.name  
  2. from DomesticCat as mother   
  3.     inner join mother.mate as mate   
  4.     left join mother.kittens as offspr  


或存放在一个List对象中:

Sql代码
  1. select new list(mother, offspr, mate.name)   
  2. from DomesticCat as mother   
  3.     inner join mother.mate as mate   
  4.     left outer join mother.kittens as offspr  

 

也可能直接返回一个实际的类型安全的Java对象(假设类Family有一个合适的构造函数):

Sql代码
  1. select new Family(mother, mate, offspr)   
  2. from DomesticCat as mother   
  3.     join mother.mate as mate   
  4.     left join mother.kittens as offspr  


也可以使用关键字as给“被选择了的表达式”指派别名:

Sql代码
  1. select max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n   
  2. from Cat cat  

 

这种做法在与子句select new map一起使用时最有用:

Sql代码
  1. select new map( max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n )   
  2. from Cat cat
原创粉丝点击