在使用hibernate过程中有许多查询需要用到sql原生语句进行查询。同时又希望查询结果可以直接保存到POJO对象中。下面给出hibernate的实现方式。
需求: 查询如下表:
查询结果的同时判断该节点是否是叶子节点(树形结构),可以通过以下查询语句来实现:
select
id ,
element_value as 'text',
parent as 'pid',
CASE (
select
count(child.id)
from
element_value_set child
where
child.parent = par.id
)
when 0 then 1
else 0
END as leaf
from
element_value_set par
where
par.parent = ?
1. 对应的树形结构POJO
package com.ruijie.db.hibernate.mapping;
/**
* @author Ext 树结构
*
*/
public class Tree {
private int id;
private int pid;
private String text;
private boolean leaf;
// TODO : 对应的get和set方法
}
2. 在查询的过程中注意查询结果列明要和pojo中的元素名相同.如果不一样可以通过as 来进行别名。
@SuppressWarnings("unchecked")
public List<Tree> getTreeValueByQueryBean(int pid) {
final String sql = "select id ,parent as 'pid',element_value as 'text',case (select count(child.id) from element_value_set child where child.parent = par.id) when 0 then 1 else 0 end as leaf from element_value_set par where par.parent = " + pid;
// 要进行强制转换
List<Tree> tree = (List<Tree>)hibernateTemplate.execute(new HibernateCallback(){
@Override
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
SQLQuery query = session.createSQLQuery(sql);
// 指定查询结果属性类型
query.addScalar("id",Hibernate.INTEGER);
query.addScalar("text", Hibernate.STRING);
query.addScalar("leaf",Hibernate.BOOLEAN);
query.addScalar("pid", Hibernate.INTEGER);
// 进行结果集的转换
query.setResultTransformer(Transformers.aliasToBean(Tree.class));
// 查询结果并且放回
return query.list();
}});
return tree;
}
- 大小: 11 KB
分享到:
相关推荐
15.2.3 Java Persistence中的原生SQL 15.3 过滤集合 15.4 高速缓存查询结果 15.4.1 启用查询结果高速缓存 15.4.2 理解查询高速缓存 15.4.3 什么时候使用查询高速缓存 15.4.4 自然标识符...
10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两个不同数据库间复制对象 10.10. Session刷出(flush) 10.11. 传播性持久化...
10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两个不同数据库间复制对象 10.10. Session刷出(flush) 10.11. 传播性持久化...
10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两个不同数据库间复制对象 10.10. Session刷出(flush) 10.11. 传播性持久化...
原生SQL查询 13.1. 创建一个基于SQL的Query 13.2. 别名和属性引用 13.3. 为SQL查询命名 14. 性能提升(Improving performance) 14.1. 理解集合的性能 14.1.1. 分类 14.1.2. Lists, maps 和...
10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两个不同数据库间复制对象 10.10. Session刷出(flush) 10.11. 传播性持久化...
10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两个不同数据库间复制对象 10.10. Session刷出(flush) 10.11. 传播性持久化...
10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两个不同数据库间复制对象 10.10. Session刷出(flush) 10.11. 传播性持久化...
10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两个不同数据库间复制对象 10.10. Session刷出(flush) 10.11. 传播性持久化...
使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两个不同数据库间复制对象 10.10. Session刷出(flush) 10.11. 传播性持久化...
11.4.4. 使用原生SQL的查询 11.5. 修改持久对象 11.6. 修改脱管(Detached)对象 11.7. 自动状态检测 11.8. 删除持久对象 11.9. 在两个不同数据库间复制对象 11.10. Session刷出(flush) 11.11. 传播性持久化...
原生SQL查询 13.1. 创建一个基于SQL的Query 13.2. 别名和属性引用 13.3. 为SQL查询命名 14. 性能提升(Improving performance) 14.1. 理解集合的性能 14.1.1. 分类 14.1.2. Lists, maps 和...
10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两个不同数据库间复制对象 10.10. Session刷出(flush) 10.11. 传播性持久化...
11.4.4. 使用原生SQL的查询 11.5. 修改持久对象 11.6. 修改脱管(Detached)对象 11.7. 自动状态检测 11.8. 删除持久对象 11.9. 在两个不同数据库间复制对象 11.10. Session刷出(flush) 11.11. 传播性持久化...
使用原生SQL的查询 11.5. 修改持久对象 11.6. 修改脱管(Detached)对象 11.7. 自动状态检测 11.8. 删除持久对象 11.9. 在两个不同数据库间复制对象 11.10. Session刷出(flush) 11.11. 传播性持久化...
10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两个不同数据库间复制对象 10.10. Session刷出(flush) 10.11. 传播性持久化...
详细的Hibernate3的帮助文档 前言 ...11.4.4. 使用原生SQL的查询 11.5. 修改持久对象 11.6. 修改脱管(Detached)对象 11.7. 自动状态检测 11.8. 删除持久对象 11.9. 在两个不同数据库间复制对象
3、QueryBuilder:单表查询基本上都可以实现零Sql(除非查询条件特别复杂的),更新、删除等操作也可以通过QueryBuilder进行批量处理,不局限于根据主键来处理。 4、分表操作的支持:对于分表操作和常规的使用...
3.4.1. SQL 方言 ...................................................... 42 3.4.2. 外连接抓取(Outer Join Fetching) .............................. 43 3.4.3. 二进制流(Binary Streams) ....................
12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用服务器中使用Hibernate的注意事项 12.3. ...