我对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列表。 但我只想要那个字段名称,所以我该怎么办?
答案 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());