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

 

时间: 2024-12-23 18:04:21

hibernate 级联查询的相关文章

hibernate级联查询的问题

问题描述 根据项目要求,在每个表中加了删除标志deleted_flag,删除用1标志,未删除用0标志.在用hibernate本身的级联查询会把之前的子表已经删除的数据也检索出来.求最好的解决方法.问题补充:如果是一对一呢?怎么解决/您这上面只有对集合进行问题补充:没有其他方法了吗?把one-to-one改成one-to-many,也太奇怪了.换个角度来说,就是换了它们2者的关系了 解决方案 使用Filter引用http://www.qqgb.com/Program/Java/JavaJC/Pro

关于hibernate多表级联查询的问题

问题描述 关于hibernate多表级联查询的问题 有一个问题,有4个表和对应的类A,B,C,D,A和B分别与C级联,C和D级联,但是A需要获取D中信息,但是B不需要,怎么在B里设置不查询D?怎么注解? 解决方案 多表级联Hibernate级联关系问题

级联查询(回答就有分)

问题描述 在不确定级联层数时,怎样进行级联查询,如:A{id,name,bid},b{id,name,cid},c{id,name,did}......以A表为基础,级联查询所有name,注意:不确定级联层数. 解决方案 本帖最后由 czp896019976 于 2011-04-17 16:55:30 编辑解决方案二:我用的数据库是mssqlserver解决方案三:没人会吗?解决方案四:不会/...........解决方案五:用多表连接查询解决方案六:不确定级联层数,估计就只好拼接sql语句了-

SSH框架网上商城项目第5战之商品类别级联查询和分页功能_java

上文我们完成了EasyUI菜单的实现,点击这里查看,这一节我们主要来写一下CategoryServiceImpl实现类,完成数据库的级联查询.一般项目从后往前做,先做service(我们没有抽取Dao,最后再抽取),做完了再做上面层. 在写之前,先看一下数据库中的表的情况: drop database if exists shop; /*创建数据库,并设置编码*/ create database shop default character set utf8; use shop; /*删除管理员

Mybatis 级联查询 (一对多 )

后台系统中 涉及到添加试卷 问题 答案的一个模块的.我需要通过试卷 查询出所有的试题,以及试题的答案.这个主要要使用到Mybatis的级联查询. 通过试卷 查询出与该试卷相关的试题(一对多),查询出试题的答案及分数(一对多). SelfTestTitle 实体类,SelfTestQuestion实体类,SelfTestAnswer实体类. package org.system.entity.self; import java.util.List; import org.core.entity.B

Hibernate属性查询简介

本文向大家介绍Hibernate属性查询,可能好多人还不了解Hibernate属性查询,没有关系,看完本文 你肯定有不少收获,希望本文能教会你更多东西. 今天说一下Hibernate属性查询:使用HQL的时候并不是把 hbm.xml 里面的所有属性取出来,只取出有 用的属性便可以了,举个例子: List list =session.createQuery ("select user.name,user.age from TUSER user").list(); Iterator it

spring-新手关于Spring管理Hibernate下查询性能的疑问

问题描述 新手关于Spring管理Hibernate下查询性能的疑问 我这么两段代码: 1.Query query = Dao.createQuery("from table"); list = query.list(); for(Table item : list){ Query query2 = Dao2.createQuery("select id from table2"); list = query2.list(); } 2.Query query = D

java-Java Hibernate中查询取值

问题描述 Java Hibernate中查询取值 Sql语法是这样的:![图片说明] 用Hibernate查询的语法不知道有没有问题呢? 还有最后一个问题: 我查询后的值存在query里面了, 我又要怎么取值呢? 求大家帮帮忙 解决方案 你那ID写里面就是死值了,要么用"?"代替,要么用 "+ +" 抱起来,哪有你那么写的 解决方案二: query.list()吧,然后看返回值是什么类型就用什么类型去接收就OK了.推荐看看这个先,里面有你想要的内容:http://z

hibernate hql查询问题

问题描述 hibernate hql查询问题 遇到个hibernate hql查询的问题,求高手解答 实体类A包含实体类T属性,实体类T有两个子类T1,T2,代码如下: A{ T t; } T{ } T1 extends T{ } T2 extends T{ } 现在我要查询A,条件是T为T2的类型,HQL语句应该怎么写? 解决方案 除了Java类与属性的名称外,查询语句对大小写并不敏感. 所以 SeLeCT 与 sELEct 以及 SELECT 是相同的,但是 org.hibernate.eg