Hibernate 原生SQL查询反射到POJO

在使用hibernate过程中有许多查询需要用到sql原生语句进行查询。同时又希望查询结果可以直接保存到POJO对象中。下面给出hibernate的实现方式。

需求: 查询如下表:

[img]http://dl.iteye.com/upload/attachment/0080/5743/3d05c753-841d-3685-8e3c-e88c39762fa1.jpg[/img]

查询结果的同时判断该节点是否是叶子节点(树形结构),可以通过以下查询语句来实现:


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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值