hibernate使用原生的sql,解决管理查询、结果集封装等问题
2017-09-21 12:52
591 查看
前提:hibernate的
public List<Aorder> findByExample(Aorder instance){xxxx}
方法,是不支持管理查询的。只能写sql自己查。
@Entity
@Table(name = "aorder", catalog = "console")
public class Aorder implements java.io.Serializable {
// Fields
private Integer oid;
private Auser auser;//hibernate反向工程,多对一;结果在多的一方生成了一的实体auser,在一的一方生成了多的一方的集合List<aorder>;
private Integer version;
private Timestamp creation;
private Timestamp lastModified;
private String name;
private String type;
private Boolean removed;
private Double totalBudget;
private String contractNo;
private String convertPoint;
private String kpiType1;
private Double price1;
private String kpiType2;
1、封装实体bean
2、aorderDao,dao层的查询方法
//根据uid查询
public List<Aorder> findByModel(Integer uid){
try {
List<Aorder> aolist=new ArrayList<Aorder>();
String hql="select o.*,a.* from aorder o left join auser a on a.uid=o.uid where o.uid= "+uid;
debug显示的数据结构,可以看到,管理查询的结果全部封装到了写好的实体bean中了。
再遍历,拿到你想要的就行了。
public List<Aorder> findByExample(Aorder instance){xxxx}
方法,是不支持管理查询的。只能写sql自己查。
@Entity
@Table(name = "aorder", catalog = "console")
public class Aorder implements java.io.Serializable {
// Fields
private Integer oid;
private Auser auser;//hibernate反向工程,多对一;结果在多的一方生成了一的实体auser,在一的一方生成了多的一方的集合List<aorder>;
private Integer version;
private Timestamp creation;
private Timestamp lastModified;
private String name;
private String type;
private Boolean removed;
private Double totalBudget;
private String contractNo;
private String convertPoint;
private String kpiType1;
private Double price1;
private String kpiType2;
1、封装实体bean
public class NativeSQLBean { private Aideas aidea; private Aorder aorder; private Areasreport areasreport; private Auser auser; private Hoursreport hoursreport; private PlanStrategy planStrategy; public Aideas getAidea() { return aidea; } public void setAidea(Aideas aidea) { this.aidea = aidea; }//get set方法,此处省略
2、aorderDao,dao层的查询方法
//根据uid查询
public List<Aorder> findByModel(Integer uid){
try {
List<Aorder> aolist=new ArrayList<Aorder>();
String hql="select o.*,a.* from aorder o left join auser a on a.uid=o.uid where o.uid= "+uid;
Query query=this.getSession().createSQLQuery(hql).addEntity(Aorder.class).addEntity(Auser.class); query.setResultTransformer(Transformers.aliasToBean(NativeSQLBean.class)); List<NativeSQLBean> results= (List<NativeSQLBean>) query.list(); for (NativeSQLBean nativeSQLBean : results) { Aorder a=nativeSQLBean.getAorder(); aolist.add(a); } return aolist; } catch (HibernateException e) { throw e; } }解释:查询的结果是Object数组。(Transformers.aliasToBean(NativeSQLBean.class),这个方法可以转化list《object》 和map《string(实际是类名),object》、封装实体bean三种。
debug显示的数据结构,可以看到,管理查询的结果全部封装到了写好的实体bean中了。
List<Aorder> aolist=new ArrayList<Aorde 4000 r>();for (NativeSQLBean nativeSQLBean : results) {Aorder a=nativeSQLBean.getAorder();aolist.add(a);}
再遍历,拿到你想要的就行了。
相关文章推荐
- Hibernate使用原生SQL多表查询时字段名相同导致查询数据覆盖问题解决办法
- hibernate使用原生sql查询Hibernate原生SQL多表查询字段名重复问题以及解决方法
- 使用Hibernate 5.0、4.0、3.0 createSQLQuery执行原生Sql语句 遇到问题及解决办法集锦
- hibernate使用原生SQL查询返回结果集的处理
- 在使用Hibernate时,因为一个查询需要更多的表连接而要使用SQL来解决性能问题。然而返回的结果集中包含了没有映射的Entity类中的表字段,在这个SQL中还有使用如何将层次关系的父子结点显示为横行
- hibernate使用原生SQL查询返回结果集的处理
- Hibernate 使用原生SQL查询无法使用别名问题
- Hibernate 使用原生SQL查询oracle数据库显示问题(char,Date)
- 关于Hibernate在使用原生SQL语句多表查询所遇到的问题
- 解决Hibernate原生SQL映射问题 - SQL查询出来的结果映射为值对象
- Hibernate中使用sql查询结果后再封装成实体类的问题
- 解决Hibernate原生SQL映射问题
- Hibernate 使用createSQLQuery查询时,缓存问题
- Hibernate SQLQuery 原生SQL 查询及返回结果集处理-1
- 关于Hibernate在weblogic中使用查询的时候该页无法显示的问题解决
- 简单修改Hibernate源码,增加使用原生SQL查询时动态addEntity和addScalar功能
- Hibernate 使用原生SQL进行查询
- Hibernate SQLQuery 原生SQL 查询及返回结果集处理-2
- hibernate通过sql语句查询出的结果集封装到bean里面去
- "执行SQL语句时出现问题操作必须使用一个可更新的查询"错误的解决方法