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.     }  

 

相关文章
|
8月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(Dept.java)
Hibernate中使用Criteria查询及注解——(Dept.java)
|
5月前
|
API Java 数据库连接
从平凡到卓越:Hibernate Criteria API 让你的数据库查询瞬间高大上,彻底告别复杂SQL!
【8月更文挑战第31天】构建复杂查询是数据库应用开发中的常见需求。Hibernate 的 Criteria API 以其强大和灵活的特点,允许开发者以面向对象的方式构建查询逻辑,同时具备 SQL 的表达力。本文将介绍 Criteria API 的基本用法并通过示例展示其实际应用。此 API 通过 API 构建查询条件而非直接编写查询语句,提高了代码的可读性和安全性。无论是简单的条件过滤还是复杂的分页和连接查询,Criteria API 均能胜任,有助于提升开发效率和应用的健壮性。
166 0
|
5月前
|
SQL Java 数据库连接
|
5月前
|
缓存 Java 数据库连接
什么是 Hibernate 查询语言或 HQL?
【8月更文挑战第21天】
153 0
|
5月前
|
SQL Java 数据库连接
在 Hibernate 中何时使用条件查询?
【8月更文挑战第21天】
59 0
|
5月前
|
缓存 Java 数据库连接
Hibernate 中的查询缓存是什么?
【8月更文挑战第21天】
47 0
|
5月前
|
SQL 安全 Java
|
8月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(Emp.hbm.xml)
Hibernate中使用Criteria查询及注解——(Emp.hbm.xml)
|
8月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——( EmpCondition)
Hibernate中使用Criteria查询及注解——( EmpCondition)
|
8月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(DeptTest.java)
Hibernate中使用Criteria查询及注解——(DeptTest.java)