前提: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);
}
再遍历,拿到你想要的就行了。