如何只返回一个hibernate查询中的某些列?

时间:2015-03-27 12:34:16

标签: java mysql sql hibernate

我想从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,其中包含字段nameidstatusgetterssetters以及{ {1}}。我还需要做些什么才能使constuctor将此查询返回到此Hibernate对象中,而不仅仅是作为对象?

3 个答案:

答案 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);