Hibernate 原生 SQL 查询

Posted

技术标签:

【中文标题】Hibernate 原生 SQL 查询【英文标题】:Hibernate Native SQL Query 【发布时间】:2013-01-09 12:15:46 【问题描述】:

我的 Native SQL 语句是这样的:

SQL查询:

select Name ,Id,COUNT(ID) from Employee;

员工 HBM 文件:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="edu.model.Master" table="test_prefixmaster">
        <id name="empcode" column="EMPCODE" length="10" ></id>

        <property name="empname">
            <column name="NAME" length="30" />
        </property>
    </class>
    <sql-query name="SQLQuery" callable="true">
    <return alias="emp" class="edu.model.Employee">
        <return-property name="empid" column="EMPID" />
        <return-property name="empname" column="EMPNAME" />
        </return>
        </sql-query>
</hibernate-mapping>

在 MyTest 类中:

   Query query = session.getNamedQuery("SQLQuery");
    List emp=new ArrayList();
    for (int i = 0; i < emp.size(); i++)                   
    Employee emp = (Employee) emp.get(i);
    System.out.println("Employee Id:::" + emp.getEmpId());
   System.out.println("Employee Name:::" + emp.getEmpname());
//I want to get here System.out.println("Employee Count");

如何在循环中映射和打印员工人数?

【问题讨论】:

【参考方案1】:
   Query query = session.getNamedQuery("SQLQuery");
    List empList=new ArrayList();
    for (int i = 0; i < empList.size(); i++)                   
    Employee emp = (Employee) empList.get(i);
    System.out.println("Employee Code:::" + emp.getEmpcode());
   System.out.println("Employee Name:::" + emp.getEmpname());

//I want to get here System.out.println("Employee Count");
   System.out.println("Employee Count:::" + empList.size());

针对不同的员工

更改您的查询

select Name ,distinct (Id) from Employee ;

【讨论】:

在我的查询中,员工 ID 将被重复,我想找到特定员工的计数? 我在这里展示了一个简单的查询,但是我的查询如果我在 mysql 命令提示符下执行,它会返回一个 Particula Employee 的计数?我想用 Hibernate 运行相同的查询吗? 你可以在这里找到我的查询:***.com/questions/14212488/…你的答案将返回所有列表大小,但这不是实际要求 如何将它放入我的 Employee Model 类,如何通过 emp 引用引用(emp.getEmpCode 等...) distict(Id)? 仅在 id 列上添加了不同的类,它仍然会引用模型类中的 id 列。问题是它会返回 Unique Emplooye 对象,然后我们在 List 上调用 size。【参考方案2】:

您选择的最佳答案符合您的目的。但是,如果您想要查询中的 ID 计数,则需要在实体类中添加另一个属性作为 empIdCount 并将计数值映射到它。这将满足您的目的。您可以直接获取 EmpIds 的计数。

【讨论】:

以上是关于Hibernate 原生 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

第十一节:Hibernate 原生Sql

Hibernate的批量查询——原生sql查询

Hibernate-原生sql

Hibernate-原生sql

笔记:Hibernate SQL 查询

Hibernate原生sql的查询,返回结果设置到DTO