phe*_*mix 2 java orm spring hibernate jpa
有一个Hibernate查询:
@Override
@Transactional
public List<> getClassificationOfPta() {
String hql = "select p , c from Pta p join p.classePta c where c.niveau = 2 order by p.creation";
Session sessionDynamic = Utils.createDynamicSession(env);
Query query = sessionDynamic.createQuery(hql);
@SuppressWarnings("unchecked")
List<> list = (List<>) query.list();
sessionDynamic.close();
return list;
}
Run Code Online (Sandbox Code Playgroud)
那么在里面写<>什么呢?
如果您保持查询原样,您将获得一个对象数组列表:List<Object[]>.
数组的零索引将保存Pta实例,第一个索引将保存ClassPta实例.
在这种情况下,您必须手动打开该结果集.
有一种方法可以通过使用Result类来自动化该过程:
package com.myapp;
public class Result{
private Pta pta;
private ClassPta classPta;
public (Pta pta, ClassPta classPta){
this.pta = pta;
this.classPta = classPta;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您需要更改查询和事务方法实现,如下所示:
@Transactional
public List<Result> getClassificationOfPta() {
String hql = "select new com.myapp.Result(p as pta, c as classPta)
from Pta p join p.classePta c where c.niveau = 2 order by p.creation";
Session sessionDynamic = Utils.createDynamicSession(env);
Query query = sessionDynamic.createQuery(hql);
List<Result> list = (List<Result>) query.list();
sessionDynamic.close();
return list;
}
Run Code Online (Sandbox Code Playgroud)
第二个appraoch当然更干净,但电话是你的.
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |