【问题标题】:Retrieve single field rather than whole pojo in hibernate在休眠中检索单个字段而不是整个 pojo
【发布时间】:2020-07-30 23:46:32
【问题描述】:

我有一些关于休眠的问题,

表: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;

但是我们如何在hibernate中实现上述同样的事情呢?

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

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

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    在 HQL 中,您可以简单地要求一个字段:

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

    【讨论】:

    • 别忘了投:)
    【解决方案2】:
    【解决方案3】:

    这对我有用

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

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

    【讨论】:

      【解决方案4】:
      // to retrieve a single row or record
      String hqlSelectRow ="from Employee where employeeId =:empId";
      Query query1 = session.createQuery(hqlSelectRow);
      Employee emp = (Employee) query1.setParameter("empId",111).uniqueResult();
      System.out.println("employee id : "+ emp.getEmployeeId() );
      System.out.println("employee name : "+ emp.getEmployeeName() );
      System.out.println("employee salary : "+ emp.getEmployeeSalary());
      

      【讨论】:

        【解决方案5】:

        您标记了 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();
        

        【讨论】:

          【解决方案6】:

          使用 Hibernate 投影,这里是我仅检索表的唯一 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());
          

          【讨论】:

            猜你喜欢
            • 2020-09-21
            • 1970-01-01
            • 2010-11-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-17
            相关资源
            最近更新 更多