hibernate级联查询
1,实体类结构
- @Entity
- @Table(name = "t_vote")
- public class Vote {
- private int id;
- /***
- * 1:最宜居<br>
- * 2:最优户<br>
- * 3:最佳物业
- */
- private int type;
- private HouseBuilding houseBuilding;
- /***
- * 投票数
- */
- private long voteCount;
- @OneToOne
- @JoinColumn(name = "house_building_id")
- public HouseBuilding getHouseBuilding() {
- return houseBuilding;
- }
- }
- @Entity
- @Table(name = "t_house")
- public class HouseBuilding {
- private int id;
- private String name;
- private String address;
- private Float price;
- /***
- * 预留
- */
- private String reserved;
- }
2,关系
Vote和HouseBuilding 是一对一的外键关系,从Vote 可以导航到HouseBuilding,反之不能.
3,查询语句(实例)
- Vote vote=super.get("type", type,"houseBuilding.id",houseBuildingId);
super.get 方法体如下:
- public T get(String propertyName,Object propertyValue,String propertyName2,Object propertyValue2){
- return (T)this.getCurrentSession().createCriteria(clz)
- .add(Restrictions.eq(propertyName, propertyValue))
- .add(Restrictions.eq(propertyName2, propertyValue2))
- .uniqueResult();
- }
所以实际上相当于:
- Vote vote=(Vote) super.getCurrentSession().createCriteria(clz)
- .add(Restrictions.eq("type", type))
- .add(Restrictions.eq("houseBuilding.id",houseBuildingId))
- .uniqueResult();
类似于:
- Vote vote=(Vote) super.getCurrentSession().createCriteria(clz)
- .add(Restrictions.eq("type", type))
- .createAlias("houseBuilding", "houseBuilding222")
- .add(Restrictions.eq("houseBuilding222.id", houseBuildingId))
- .uniqueResult();
4,执行的SQL 语句
- select
- this_.id as id1_21_1_,
- this_.house_building_id as house4_21_1_,
- this_.type as type2_21_1_,
- this_.vote_count as vote3_21_1_,
- housebuild2_.id as id1_9_0_,
- housebuild2_.address as address2_9_0_,
- housebuild2_.name as name3_9_0_,
- housebuild2_.price as price4_9_0_,
- housebuild2_.reserved as reserved5_9_0_
- from
- t_vote this_
- left outer join
- t_house housebuild2_
- on this_.house_building_id=housebuild2_.id
- where
- this_.type=?
- and this_.house_building_id=?
- 07 十月 2015 10:04:22,589 TRACE org.hibernate.type.descriptor.sql.BasicBinder:84 - binding parameter [1] as [INTEGER] - 1
- 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配置文件
- @BeforeClass
- public static void before() {
- ctx = new ClassPathXmlApplicationContext("beans.xml");
- // clientVersionDao = (ClientVersionDao) ctx.getBean("clientVersionDao");
- // oSVersionDao = (OSVersionDao) ctx.getBean("osVersionDao");
- // osTypeDao = (OsTypeDao) ctx.getBean("osTypeDao");
- paperNewsDao = (PaperNewsDao) ctx.getBean("paperNewsDao");
- voteDao = (VoteDao) ctx.getBean("voteDao");
- }
时间: 2024-12-23 18:04:21