`
lixw
  • 浏览: 200800 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Hibernate中的层级查询

    博客分类:
  • SSH
阅读更多

1、只有两个层次时候的查询:

     方法1-利用HQL查询:

public class Pack {
	private String id;
	private Pack parentPack;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public Pack getParentPack() {
		return parentPack;
	}
	public void setParentPack(Pack parentPack) {
		this.parentPack = parentPack;
	}
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		final Pack other = (Pack) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}	
}

  

     注意,上面Pack类中的equals()和hashCode()方法,这里是利用Eclipse自动生成,我们还可以通过EqualsBuilder生成。覆盖Object的这两个方法,有利于按照业务对对象进行比较,防止按照引用比较。

     假设我们有个对象Pack,它是一个层级结构(假设只有两层),如果指定一个包,来查询它的子包(一级),我们可以这样做:

 

public List<Pack> getChildPacksByHQL(Pack p) throws Exception {
		Session session = HibernateUtil.currentSession();
		String hql = "from Pack p where p.parentPack=?";
		Query query = session.createQuery(hql);
		query.setEntity(0, p);
		return (List<Pack>) query.list();
	}

 

     方法2-利用SQL查询:

	public List<Pack> getChildPacksBySQL(Pack p) throws Exception {
		Session session = HibernateUtil.currentSession();
		String sql = "select {a.*} from tpack a where a.parent_pack_id=?";
		SQLQuery query = session.createSQLQuery(sql);
		query.addEntity("a", Pack.class);
		query.setString(0, p.getId());
		return (List<Pack>) query.list();
	}

 

     注意:上面的SQL中都是用的是实际数据库对应的表名和字段名字。

 

2、多个层次时的查询:

      可以利用数据库系统提供的递归查询SQL来实现,

具体可以参考我的这篇文章:ORACLE语句在Java代码中执行时报错:ORA-00911: 无效字符

分享到:
评论

相关推荐

    hibernate实现递归查询

    本文将深入探讨如何使用Hibernate实现递归查询,以解决在数据层次结构中涉及父节点与子节点关系时的问题。递归查询通常用于处理树形结构的数据,例如组织结构、菜单系统或者文件目录等。 首先,我们需要了解递归的...

    hibernate中的对象关系模型

    在Hibernate中,这种关系不需要特别的映射,因为Java的继承机制已经处理了对象间的层级关系。 9. **实现(Implementation)**: 类实现接口,如`BaseDAO`实现`IOperator`接口。这在Hibernate中也无需特殊处理,...

    Hibernate映射树形结构

    在IT行业中,数据库管理和对象关系映射(ORM)框架是至关重要的组成部分,特别是对于Java开发者而言,Hibernate是一个广泛使用的ORM工具。本篇文章将深入探讨如何在Hibernate中映射树形结构,这是一种处理复杂数据...

    struts2 hibernate 实现无限级联 树形分类

    Struts2和Hibernate是两种非常重要的Java Web开发框架,它们在构建高效、可维护的Web应用程序中发挥着关键作用。Struts2是一个MVC(Model-View-Controller)框架,负责处理用户请求并协调应用程序的各个部分,而...

    hibernate 自连接 emp例子

    在这个特定的例子中,我们关注的是如何在Hibernate中实现自连接查询,以处理Oracle数据库中EMP表的树状结构问题。 首先,自连接查询是指一个表与自身进行连接的操作,常用于处理具有层级关系的数据,例如员工的上...

    hibernate父亲与孩子

    在IT领域,尤其是在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作。本文将深入探讨“Hibernate父亲与孩子”这一主题,即Hibernate中的多对一和一对多关系映射,以及如何...

    hibernate源码

    Hibernate,作为Java领域中的一款著名持久化框架,极大地简化了数据库操作,使得开发者能够更加专注于业务逻辑。本篇将基于提供的文件名,深入探讨Hibernate在对象关系映射(ORM)、数据检索、延迟加载、一对一关联...

    struts hibernate dwr无限级树形菜单

    无限级树形菜单的每个节点都可以映射为一个数据库记录,通过Hibernate的关联映射实现层级关系。 Direct Web Remoting (DWR) 是一个允许JavaScript在浏览器中直接调用Java服务器端方法的库。在本项目中,DWR用于实现...

    spring4+hibernate4+springmvc4+ztree+maven

    **ZTree** 是一个基于JavaScript的树形插件,常用于展示层级结构的数据,如目录树、组织架构等。在本项目中,ZTree可能被用来实现导航菜单或者数据分类展示,提供用户友好的界面交互。 **Maven** 是一个项目管理和...

    Hibernate 单表实现树结构

    标题中的“Hibernate 单表实现树结构”是指在Java开发中,使用Hibernate框架来处理具有层级关系的数据,例如组织架构、目录树等。在数据库中,这种数据通常使用单表自连接的方式存储,即一张表中某个字段指向自身,...

    Hibernate Validation

    - 声明和校验方法约束,包括参数、返回值、级联验证以及继承层级中的方法约束。 - 如何通过消息插值自定义校验错误消息,包括默认消息插值和自定义消息插值。 - 约束分组的概念,如何请求不同的约束分组,定义约束...

    hibernate get load区别

    1. **缓存查询流程**:与`load`不同,`get`方法会沿着缓存层级顺序进行查询,即首先检查一级缓存,如果找不到再查询二级缓存,最后才是数据库。但无论结果如何,`get`方法都不会创建代理对象。 2. **返回值处理**:...

    hibernate一对多关联映射(单向关联)

    在Java的持久化框架Hibernate...在实际开发中,这种映射关系能帮助我们更好地管理和存储具有层级关系的数据。通过理解并熟练运用这种映射方式,开发者可以更高效地处理复杂的数据库操作,提高代码的可读性和可维护性。

    Hibernate ORM 新特性之 Service(Registry).

    在Hibernate ORM 4.0之前的版本中,构建SessionFactory的传统方式是通过Configuration对象,如下所示: ```java Configuration configuration = new Configuration(); SessionFactory sf = configuration....

    Hibernate关联关系配置

    下面展示了一对多关系在Hibernate中的具体配置方式: **消费者类(Customer)的配置**: ```xml &lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" ...

    5Hibernate

    6. **Paoding分页(chapter20_paoding)**:Paoding是Java中的一款优秀分页组件,它可以与Hibernate整合,实现高效且易于使用的分页查询,对于大数据量的展示尤为重要。 7. **层级关系映射(chapter14_hierarchy)*...

    Struts2+Hibernate写的下拉菜单级联两级分类

    Struts2和Hibernate是两种非常重要的Java开源框架,它们在Web开发中被广泛使用。Struts2是一个MVC(Model-View-Controller)框架,它主要用于处理用户请求、控制业务逻辑和展示视图,而Hibernate则是一个对象关系...

    Hibernate继承映射二:每个子类一张表

    在Java世界中,ORM(对象关系映射)框架如Hibernate极大地简化了数据库操作。本篇主要探讨的是Hibernate中的继承映射策略,特别是“每个子类一张表”(Table per subclass)的方式。这种方式也被称为单表继承或多表...

    JAVA+Hibernate 无限级分类.rar

    在IT行业中,数据库管理系统中的数据组织常常涉及到层级结构,例如无限级分类,这在电子商务、内容管理系统、组织架构等场景中十分常见。本主题聚焦于使用Java和Hibernate框架实现这样的功能。Hibernate作为Java领域...

    用Struts2+Spring+Hibernate三大框架完成的级联操作

    在级联操作中,Hibernate可能被用来处理省市县和年月日的数据存取,通过HQL(Hibernate Query Language)或者Criteria API来执行SQL查询,获取级联选择的数据。 级联操作的核心在于数据间的关联,例如选择一个省后...

Global site tag (gtag.js) - Google Analytics