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中,这种关系不需要特别的映射,因为Java的继承机制已经处理了对象间的层级关系。 9. **实现(Implementation)**: 类实现接口,如`BaseDAO`实现`IOperator`接口。这在Hibernate中也无需特殊处理,...
在IT行业中,数据库管理和对象关系映射(ORM)框架是至关重要的组成部分,特别是对于Java开发者而言,Hibernate是一个广泛使用的ORM工具。本篇文章将深入探讨如何在Hibernate中映射树形结构,这是一种处理复杂数据...
Struts2和Hibernate是两种非常重要的Java Web开发框架,它们在构建高效、可维护的Web应用程序中发挥着关键作用。Struts2是一个MVC(Model-View-Controller)框架,负责处理用户请求并协调应用程序的各个部分,而...
在这个特定的例子中,我们关注的是如何在Hibernate中实现自连接查询,以处理Oracle数据库中EMP表的树状结构问题。 首先,自连接查询是指一个表与自身进行连接的操作,常用于处理具有层级关系的数据,例如员工的上...
在IT领域,尤其是在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作。本文将深入探讨“Hibernate父亲与孩子”这一主题,即Hibernate中的多对一和一对多关系映射,以及如何...
Hibernate,作为Java领域中的一款著名持久化框架,极大地简化了数据库操作,使得开发者能够更加专注于业务逻辑。本篇将基于提供的文件名,深入探讨Hibernate在对象关系映射(ORM)、数据检索、延迟加载、一对一关联...
无限级树形菜单的每个节点都可以映射为一个数据库记录,通过Hibernate的关联映射实现层级关系。 Direct Web Remoting (DWR) 是一个允许JavaScript在浏览器中直接调用Java服务器端方法的库。在本项目中,DWR用于实现...
**ZTree** 是一个基于JavaScript的树形插件,常用于展示层级结构的数据,如目录树、组织架构等。在本项目中,ZTree可能被用来实现导航菜单或者数据分类展示,提供用户友好的界面交互。 **Maven** 是一个项目管理和...
标题中的“Hibernate 单表实现树结构”是指在Java开发中,使用Hibernate框架来处理具有层级关系的数据,例如组织架构、目录树等。在数据库中,这种数据通常使用单表自连接的方式存储,即一张表中某个字段指向自身,...
- 声明和校验方法约束,包括参数、返回值、级联验证以及继承层级中的方法约束。 - 如何通过消息插值自定义校验错误消息,包括默认消息插值和自定义消息插值。 - 约束分组的概念,如何请求不同的约束分组,定义约束...
1. **缓存查询流程**:与`load`不同,`get`方法会沿着缓存层级顺序进行查询,即首先检查一级缓存,如果找不到再查询二级缓存,最后才是数据库。但无论结果如何,`get`方法都不会创建代理对象。 2. **返回值处理**:...
在Java的持久化框架Hibernate...在实际开发中,这种映射关系能帮助我们更好地管理和存储具有层级关系的数据。通过理解并熟练运用这种映射方式,开发者可以更高效地处理复杂的数据库操作,提高代码的可读性和可维护性。
在Hibernate ORM 4.0之前的版本中,构建SessionFactory的传统方式是通过Configuration对象,如下所示: ```java Configuration configuration = new Configuration(); SessionFactory sf = configuration....
下面展示了一对多关系在Hibernate中的具体配置方式: **消费者类(Customer)的配置**: ```xml <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" ...
6. **Paoding分页(chapter20_paoding)**:Paoding是Java中的一款优秀分页组件,它可以与Hibernate整合,实现高效且易于使用的分页查询,对于大数据量的展示尤为重要。 7. **层级关系映射(chapter14_hierarchy)*...
Struts2和Hibernate是两种非常重要的Java开源框架,它们在Web开发中被广泛使用。Struts2是一个MVC(Model-View-Controller)框架,它主要用于处理用户请求、控制业务逻辑和展示视图,而Hibernate则是一个对象关系...
在Java世界中,ORM(对象关系映射)框架如Hibernate极大地简化了数据库操作。本篇主要探讨的是Hibernate中的继承映射策略,特别是“每个子类一张表”(Table per subclass)的方式。这种方式也被称为单表继承或多表...
在IT行业中,数据库管理系统中的数据组织常常涉及到层级结构,例如无限级分类,这在电子商务、内容管理系统、组织架构等场景中十分常见。本主题聚焦于使用Java和Hibernate框架实现这样的功能。Hibernate作为Java领域...
在级联操作中,Hibernate可能被用来处理省市县和年月日的数据存取,通过HQL(Hibernate Query Language)或者Criteria API来执行SQL查询,获取级联选择的数据。 级联操作的核心在于数据间的关联,例如选择一个省后...