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 查询的主要内容,如果未能解决你的问题,请参考以下文章