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中,对其中的查询方式进行总结,包括hql查询,条件查询,sql查询等
Hibernate中的查询方法若HQL,详细讲解HQL与使用的具体例子
hibernate 中HQL语句查询学习笔记
Hibernate_query查询数据表中的一个字段.
关于Hibernate3中文查询出错问题的解决,相信有不少朋友也遇过这种问题,希望对大家有所帮助
Hibernate中的查询:HQL、Criteria、原生SQl的Demo,希望可以帮助大家理解Hibernate查询。
hibernate 多表查询 hibernate 多表不同于一般的sql嵌套查询,嵌套查询是不支持的,所以必须要配置好才能实现多表!只要配置好了,还是特别好用的
hibernate多表联合查询实例,很经典的查询语句和总结.
Hibernate_QBC查询
Hibernate中的关联查询实际上生成的是数据库表连接查询的SQL语句
实际开发中碰到一个使用hibernate递归查询的问题。我解决了发出来给大家一起分享
关于hibernate映射和查询,使用MySQL,适合初学者的练习
Hibernate的MySql查询 大家放心收藏! saivicky出品!必属精品!
Hibernate的查询方式Hibernate的查询方式
Hibernate分页查询小结
专用于HIBERNATE中两个对象间的外键关联查询
Hibernate SQLQuery 查询Oracle char类型结果为一个字符解决方法 Hibernate SQLQuery 查询Oracle char类型结果为一个字符解决方法 Hibernate SQLQuery 查询Oracle char类型结果为一个字符解决方法 Hibernate SQL...
该源代码配了了解释,针对hibernate中多表查询的多种形式进行了总结,很有价值,有Object[]形式的查询,也有对象方式的查询 也有集合list形式的查询,
Hibernate进行数据查询