在hibernate中检索单个字段而不是整个pojo

时间:2011-06-03 06:05:42

标签: hibernate

我对hibernate有一些疑问,

表:Employee_Master

身份证号码 名称Varchar 薪水很长

POJO:EmployeeMaster.java

public class EmployeeMaster {

private int id ;
private String name;
private long salary;

//... all field s getter/ setter  methods


}

现在我想从这样的id中获取名称。

SQL查询,如:

select name from employee_master where id = 10;

但是我们怎样才能在休眠中实现上述相同的事情呢?

session.createQuery("from EmployeeMaster empMaster where empMaster.id = 10");

我知道这个解决方案,但它将返回整个pojo列表。 但我只想要那个字段名称,所以我该怎么办?

5 个答案:

答案 0 :(得分:8)

在HQL中,您只需要求一个字段:

String employeeName = session.createQuery("select empMaster.name from EmployeeMaster empMaster where empMaster.id = :id").setInteger("id",10).uniqueResult();

答案 1 :(得分:4)

答案 2 :(得分:2)

这对我有用

String orderNo = (String) getCurrentSession().createQuery("select orderNumber from Asset where id = :id").setParameter("id", assetId).uniqueResult();

setInteger对我不起作用,然后我使用了setParameter。

答案 3 :(得分:0)

你标记了nhibernate,但你对pojo的引用让我假设你是用Java编写的。你在用JPA吗?如果是这样,请考虑使用本机查询...

EntityManager em ....
Query q = em.createNativeQuery("select e.name from employee_master e where e.id = ?");
q.setParamter(1, <employee id>);
String name = (String) q.getSingleResult();

答案 4 :(得分:0)

使用Hibernate Projection,这是一个示例,其中我仅检索表的唯一idCsvAccount:

Criteria criteria = ...;
criteria.add(Restrictions.eq("idUser", idUser));
return (Long) criteria.setProjection(Projections.property("idCsvAccount")).uniqueResult();

下面是多个结果的示例:

Criteria criteria = ...;
criteria.add(Restrictions.eq("idUser", idUser));
return ((List<Long>) criteria.setProjection(Projections.property("idCsvAccount")).list());