hibernate使用原生的sql,解决管理查询、结果集封装等问题

前提: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

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<Aorder>();
          for (NativeSQLBean nativeSQLBean : results) {
                        Aorder a=nativeSQLBean.getAorder();aolist.add(a);
             }
再遍历,拿到你想要的就行了。

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值