`

hibernate 级联查询

    博客分类:
  • Java
阅读更多

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");
	}

 

7,源代码

上述代码中的super指com.common.dao.generic.GenericDao ,详见附件

 

0
1
分享到:
评论

相关推荐

    Hibernate的缓存级联查询

    HQL(Hibernate Query Language)是Hibernate提供的面向对象的查询语言,它支持多种连接查询类型,如内连接、迫切内连接、隐式内连接、左外连接、迫切左外连接、右外连接和交叉连接,提供了与SQL类似的查询功能。...

    Hibernate的级联操作(增,删,该)

    级联操作虽然方便,但也可能带来性能问题,因为它们可能会触发额外的数据库查询或更新。因此,应根据实际需求谨慎选择级联类型,避免不必要的数据库操作。另外,对于那些不需要立即更新数据库的场景,可以考虑使用...

    Hibernate级联操作一对多demo

    在这个" Hibernate级联操作一对多demo "中,我们将探讨如何在一对多的关系中应用级联操作。 一对多关系是数据库中常见的关系类型,它表示一个实体(如部门)可以有多个相关实体(如员工)。在Hibernate中,这种关系...

    hibernate级联增删改查

    本主题将深入探讨"hibernate级联增删改查",特别是针对"t_card主表"和"t_person从表"的关系。 首先,级联操作在Hibernate中是一种配置,用于指定当主表中的实体发生变化时,是否以及如何更新或删除关联的从表实体。...

    java级联查询、分页查询

    首先,级联查询在Java中通常是通过ORM(对象关系映射)框架,如Hibernate或MyBatis来实现的。级联查询允许我们在一次数据库访问中获取关联对象的数据,而无需多次单独查询。例如,假设我们有一个`User`类和一个`...

    hibernate 级联(cascade和inverse)一对多

    一、Hibernate级联(Cascade) 级联操作允许我们将对一个实体的更改自动应用到与之关联的其他实体。在一对多关系中,如果一个实体(父实体)与多个实体(子实体)关联,设置级联属性可以确保在处理父实体时,子实体...

    3.3、Hibernate级联关系(Av839011656,P3).mp4

    3.3、Hibernate级联关系(Av839011656,P3).mp4

    hibernate many-to-many级联保存,级联更新,级联删除

    本文将深入探讨如何在Hibernate中处理Many-to-Many关系的级联保存、级联更新和级联删除。 一、Many-to-Many关系基础 在数据库设计中,Many-to-Many关系意味着两个实体之间存在多对多的关系。例如,学生可以选修多门...

    Hibernate级联操作.docx

    在 Hibernate 中,级联操作(Cascade)和反向属性(Inverse)是管理对象关系的重要概念,特别是在处理一对多(One-to-Many)或多对一(Many-to-One)关系时。 **级联操作(Cascade)** 级联操作定义了当主对象被...

    hibernate映射继承关系(每个类都对应一张表)

    5. **查询和操作**:在使用这些类进行数据操作时,Hibernate会自动处理继承关系。你可以像操作普通实体一样操作这些继承类,例如,通过Session的`save()`, `update()`, `delete()`等方法,以及`Query`或`Criteria` ...

    关于Hibernate级联删除的问题.doc

    在文档中提到的场景下,我们来详细探讨Hibernate级联删除的原理和配置方法。 首先,我们要理解关系映射中的几个关键概念。在给出的例子中,有四个表:A、AA、B和BB,它们之间存在一对多(one-to-many)和一对一...

    Hibernate_级联关系说明_-_关于cascade和inverse的用法

    在探讨Hibernate框架中的级联操作(cascade)与控制权反转(inverse)之前,我们需要先对Hibernate有一个基本的理解。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用提供了一种将对象模型映射到...

    Hibernate 一对多、多对一、级联、加载、反转

    在Java持久化框架Hibernate中,一对多(One-to-Many)、多对一(Many-to-One)、级联(Cascading)、加载(Loading)和反转(Inversing)是关系映射的重要概念,它们对于理解如何在数据库和对象之间有效地管理关联至...

    第七章_Hibernate_-_级联策略

    第七章_Hibernate_-_级联策略 第七章

    ajax+ssh实现省份城市级联查询

    在此,我们将深入探讨Ajax、Spring、Hibernate和Struts2这四个关键技术以及它们在实现级联查询中的作用。 Ajax(Asynchronous JavaScript and XML)是一种在不刷新整个页面的情况下与服务器交换数据并更新部分网页...

    用hibernate做的省市县三级级联,

    Hibernate的Session接口被用来执行SQL查询或更新,例如获取所有省份、根据省份ID获取城市等。DAO层的设计遵循了单一职责原则,使得代码更易于维护和测试。 `DwrBiz.java`可能引用了Direct Web Remoting (DWR) 框架...

    HibernateHQL级联注意事项[归类].pdf

    本文档主要讨论了使用Hibernate的HQL(Hibernate Query Language)进行级联查询时需要注意的一些事项。 1. 数据库模型 - `Employee`表:包含`id`(主键)、`empname`(员工姓名)、`empage`(员工年龄)、`context...

    Ajax+struts+hibernate实现级联菜单

    Ajax+struts+hibernate实现级联菜单 Ajax+struts+hibernate实现级联菜单 Ajax+struts+hibernate实现级联菜单

Global site tag (gtag.js) - Google Analytics