Java 如何为存储过程编写Hibernate映射文件?

Java 如何为存储过程编写Hibernate映射文件?,java,spring,hibernate,hibernate-mapping,Java,Spring,Hibernate,Hibernate Mapping,我有一个MySQL存储过程,它接受两个输入日期并返回EmpCode,Name,部门,员工缺勤日期和总天数 存储过程(两个给定日期范围内的员工缺勤报告): 分隔符$$ 删除过程(如果存在)`AbsentReportproc`$$ CREATE DEFINER=`root`@`localhost`PROCEDURE`AbsentReportproc`(IN\u fromdate DATETIME,IN\u todate DATETIME) 开始 创建临时表daterange25(dte日期); 设置

我有一个MySQL存储过程,它接受两个输入日期并返回
EmpCode
Name
部门
员工缺勤日期
总天数

存储过程(两个给定日期范围内的员工缺勤报告):

分隔符$$
删除过程(如果存在)`AbsentReportproc`$$
CREATE DEFINER=`root`@`localhost`PROCEDURE`AbsentReportproc`(IN\u fromdate DATETIME,IN\u todate DATETIME)
开始
创建临时表daterange25(dte日期);
设置@counter:=-1;
而(@counter
这是我的Hibernate映射文件:

<?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="dept">
            <column name="DEPARTMENT" length="30" />
        </property>
        <property name="empname">
            <column name="NAME" length="30" />
        </property>
    </class>
    <sql-query name="AbsentReportproc" callable="true">
    <return alias="master" class="edu.model.Master">
        <return-property name="empcode" column="EMPCODE" />
        <return-property name="dept" column="DEPARTMENT" />
       <return-property name="empname" column="NAME" /> 

       </return>
        <![CDATA[CALL AbsentReportproc(:_fromdate,:_todate)]]>
  </sql-query>
</hibernate-mapping>

这是我的测试类(主要):

publicstaticvoidmain(){
Query Query=session.getNamedQuery(“AbsentReportproc”);
query.setParameter(“_fromdate”,“2012-11-22”);
query.setParameter(“_todate”,“2012-11-23”);
List absentiesList=new ArrayList();
absentiesList=query.list();
对于(int i=0;i
当我运行Hibernate代码时,我能够成功地打印员工代码、姓名和部门

但我的实际需求是如何映射列并从名为
daterange25
的临时表中打印d.dte的值?我应该为临时表创建Pojo吗


谢谢

我认为没有办法将SP的结果直接映射到实体。您应该编写并实例化自己的pojo,或者您可以将实体映射到SP存储结果的临时表。

您可以基于SP结果的结构创建pojo,并在hibernate映射XML中映射其列,而无需指定表名。不需要返回属性标记

<?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="dept">
            <column name="DEPARTMENT" length="30" />
        </property>
        <property name="empname">
            <column name="NAME" length="30" />
        </property>
    </class>
    <sql-query name="AbsentReportproc" callable="true">
    <return alias="master" class="edu.model.Master">
        <return-property name="empcode" column="EMPCODE" />
        <return-property name="dept" column="DEPARTMENT" />
       <return-property name="empname" column="NAME" /> 

       </return>
        <![CDATA[CALL AbsentReportproc(:_fromdate,:_todate)]]>
  </sql-query>
</hibernate-mapping>
public static void main(){
Query query = session.getNamedQuery("AbsentReportproc");
            query.setParameter("_fromdate", "2012-11-22");
            query.setParameter("_todate", "2012-11-23");
            List absentiesList=new ArrayList();
             absentiesList = query.list();

            for (int i = 0; i < absentiesList.size(); i++) {

                Master master = (Master) absentiesList.get(i);

        System.out.println("Employee Code:::" + master.getEmpcode());
        System.out.println("Employee Name:::"master.getEmpname());
   System.out.println("Employee Department:::" + master.getDept());         

            }
}