我想从hibernate
查询中的多个表中返回某些选定的列。我可以做到这一点,但它作为一个对象类型返回,我似乎无能为力。
这是我的查询
public static synchronized List<TaskInstanceLineItem> getOpenTasks() {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
List<TaskInstanceLineItem> list = null;
try {
transaction = session.beginTransaction();
Query query = session.createQuery("SELECT DISTINCT ti.taskComponents.task.name, ti.Id, ti.status FROM TaskInstance ti"
+ " INNER JOIN ti.taskComponents.task WHERE ti.taskComponents.live=true");
list = query.list();
transaction.commit();
} catch (HibernateException e) {
transaction.rollback();
e.printStackTrace();
} finally {
session.close();
}
return list;
}
我创建了一个班级TaskInstanceLineItem
,其中包含字段name
,id
和status
,getters
和setters
以及{ {1}}。我还需要做些什么才能使constuctor
将此查询返回到此Hibernate
对象中,而不仅仅是作为对象?
答案 0 :(得分:1)
您可以从HQL创建TaskInstanceLineItem的实例。您必须使用类的字段创建构造函数。
"SELECT DISTINCT new TaskInstanceLineItem(ti.taskComponents.task.name, ti.Id, ti.status) FROM TaskInstance ti"
+ " INNER JOIN ti.taskComponents.task WHERE ti.taskComponents.live=true"
答案 1 :(得分:1)
您的类上可以有一个构造函数,它接收您要作为参数检索的字段:
public class TaskInstance {
public TaskInstance(Integer field1, String field2) {
this.field1 = field1; this.field2 = field2;
}
}
然后你创建这样的查询:
select new TaskInstance(field1, field2) from TaskInstance inner join......
答案 2 :(得分:0)
试试这个:
String SQL = ".."; //same SQL as you had before
Query query = getEntityManager().createNativeQuery(SQL); //no entity mapping
query.setParameter("idContact", 9293L);
Object string = query.getSingleResult();
System.out.println(string);