hibernate 级联查询

简介:

hibernate级联查询

1,实体类结构

Java代码   收藏代码
  1. @Entity  
  2. @Table(name = "t_vote")  
  3. public class Vote {  
  4.     private int id;  
  5.     /*** 
  6.      * 1:最宜居<br> 
  7.      * 2:最优户<br> 
  8.      * 3:最佳物业 
  9.      */  
  10.     private int type;  
  11.     private HouseBuilding houseBuilding;  
  12.     /*** 
  13.      * 投票数 
  14.      */  
  15.     private long voteCount;  
  16. @OneToOne  
  17.     @JoinColumn(name = "house_building_id")  
  18.     public HouseBuilding getHouseBuilding() {  
  19.         return houseBuilding;  
  20.     }  
  21. }  

 

Java代码   收藏代码
  1. @Entity  
  2. @Table(name = "t_house")  
  3. public class HouseBuilding {  
  4.     private int id;  
  5.     private String name;  
  6.     private String address;  
  7.     private Float price;  
  8.     /*** 
  9.      * 预留 
  10.      */  
  11.     private String reserved;  
  12. }  

 

 

 

2,关系

Vote和HouseBuilding 是一对一的外键关系,从Vote 可以导航到HouseBuilding,反之不能.

 

3,查询语句(实例)

Java代码   收藏代码
  1. Vote vote=super.get("type", type,"houseBuilding.id",houseBuildingId);  

 super.get 方法体如下:

Java代码   收藏代码
  1. public T get(String propertyName,Object propertyValue,String propertyName2,Object propertyValue2){  
  2.         return (T)this.getCurrentSession().createCriteria(clz)  
  3.                 .add(Restrictions.eq(propertyName, propertyValue))  
  4.                 .add(Restrictions.eq(propertyName2, propertyValue2))  
  5.                 .uniqueResult();  
  6.     }  

 所以实际上相当于:

Java代码   收藏代码
  1. Vote vote=(Vote) super.getCurrentSession().createCriteria(clz)  
  2.         .add(Restrictions.eq("type", type))  
  3.         .add(Restrictions.eq("houseBuilding.id",houseBuildingId))  
  4.         .uniqueResult();  

 

类似于:

Java代码   收藏代码
  1. Vote vote=(Vote) super.getCurrentSession().createCriteria(clz)  
  2.         .add(Restrictions.eq("type", type))  
  3.         .createAlias("houseBuilding""houseBuilding222")  
  4.         .add(Restrictions.eq("houseBuilding222.id", houseBuildingId))  
  5.         .uniqueResult();  

 

 

4,执行的SQL 语句

Sql代码   收藏代码
  1. select  
  2.         this_.id as id1_21_1_,  
  3.         this_.house_building_id as house4_21_1_,  
  4.         this_.type as type2_21_1_,  
  5.         this_.vote_count as vote3_21_1_,  
  6.         housebuild2_.id as id1_9_0_,  
  7.         housebuild2_.address as address2_9_0_,  
  8.         housebuild2_.name as name3_9_0_,  
  9.         housebuild2_.price as price4_9_0_,  
  10.         housebuild2_.reserved as reserved5_9_0_   
  11.     from  
  12.         t_vote this_   
  13.     left outer join  
  14.         t_house housebuild2_   
  15.             on this_.house_building_id=housebuild2_.id   
  16.     where  
  17.         this_.type=?   
  18.         and this_.house_building_id=?  
  19. 07 十月 2015 10:04:22,589 TRACE org.hibernate.type.descriptor.sql.BasicBinder:84 - binding parameter [1] as [INTEGER] - 1  
  20. 07 十月 2015 10:04:22,590 TRACE org.hibernate.type.descriptor.sql.BasicBinder:84 - binding parameter [2] as [INTEGER] - 3  

 

 

5,使用Restrictions.eq 来进行条件查询时,第一个参数可以采用"属性.子属性"的形式

6,在单元测试中,加载hibernate配置文件

Java代码   收藏代码
  1. @BeforeClass  
  2.     public static void before() {  
  3.         ctx = new ClassPathXmlApplicationContext("beans.xml");  
  4. //      clientVersionDao = (ClientVersionDao) ctx.getBean("clientVersionDao");  
  5. //      oSVersionDao = (OSVersionDao) ctx.getBean("osVersionDao");  
  6. //      osTypeDao = (OsTypeDao) ctx.getBean("osTypeDao");  
  7.         paperNewsDao = (PaperNewsDao) ctx.getBean("paperNewsDao");  
  8.         voteDao = (VoteDao) ctx.getBean("voteDao");  
  9.     }  

 

相关文章
|
2月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(Dept.java)
Hibernate中使用Criteria查询及注解——(Dept.java)
16 1
|
2月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——( EmpCondition)
Hibernate中使用Criteria查询及注解——( EmpCondition)
15 1
|
2月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(DeptTest.java)
Hibernate中使用Criteria查询及注解——(DeptTest.java)
9 1
|
2月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(Emp.hbm.xml)
Hibernate中使用Criteria查询及注解——(Emp.hbm.xml)
12 2
|
2月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(Emp.java)
Hibernate中使用Criteria查询及注解——(Emp.java)
10 0
|
5月前
|
缓存 Java 数据库连接
Hibernate - 查询缓存和时间戳缓存区域使用详解
Hibernate - 查询缓存和时间戳缓存区域使用详解
30 0
|
6月前
|
SQL 缓存 Java
什么是hibernate N+1查询
什么是hibernate N+1查询
|
12月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——( EmpCondition)
Hibernate中使用Criteria查询及注解——( EmpCondition)
49 0
|
12月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(DeptTest.java)
Hibernate中使用Criteria查询及注解——(DeptTest.java)
34 0
|
12月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(HibernateUtil)
Hibernate中使用Criteria查询及注解——(HibernateUtil)
30 0