首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate3调用无实业的存储过程

2012-09-23 
Hibernate3调用无实体的存储过程hibernate3调用存储过程,网上其实很多例子了,不过都是有实体表的调用,现在

Hibernate3调用无实体的存储过程
hibernate3调用存储过程,网上其实很多例子了,不过都是有实体表的调用,现在项目有个直接返回几个参数的结果集的,存储过程的调用(sqlserver)。
按照以前的配置方式,老出问题,大多都是列名无效……
后来使用了resultset-ref的配置方式来配置才成功
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="com.born.report.database.data.ByStudent"><composite-id name="id" type="java.lang.String">                <column name="acct_day"/>            </key-property>            <key-property name="studentName" type="java.lang.String">                <column name="student_name"/>            </key-property>            <key-property name="reasonTypeName" type="java.lang.String">                <column name="reason_type_name"/>            </key-property>            <key-property name="subScore" type="java.lang.Double">                <column name="sub_score"/>            </key-property>            <key-property name="score" type="java.lang.Double">                <column name="score"/>            </key-property></composite-id></class><resultset name="bystudent"><return ></return></resultset><sql-query name="pr_qry_learningprocess_bystu_test" resultset-ref="bystudent"><!--<return column="acct_day"/><return-property name="id.studentName" column="student_name" /><return-property name="id.reasonTypeName" column="reason_type_name"/> <return-property name="id.subScore" column="sub_score" /><return-property name="id.score" column="score" /> </return>--><return-scalar column="acct_day" type="java.lang.String" /><return-scalar column="student_name" type="java.lang.String" /><return-scalar column="reason_type_name" type="java.lang.String" /><return-scalar column="sub_score" type="java.lang.Double" /><return-scalar column="score" type="java.lang.Double" />{call pr_qry_learningprocess_bystu_test(?,?,?,?)}</sql-query></hibernate-mapping>

如果不使用resultset-ref,而是用return-property方式来读取,老出列名无效错误,分析了下日志,估计是hibernate取结果集的时候,哪个地方没对上,它用生成的短别名(acctDay as acc07)直接去取结果集……- -#,哪天有空了去看看源代码再说吧

另外,按照参考手册上的写法
    <sql-query name="pr_qry_learningprocess_bystu_test" callable="true">...</sql-query>

如果设置了callable="true",第一次查询能成功,第二次就出会说ByStudent无效(会生成select ... from ByStudent ...的sql语句)= =#
估计是因为callable了以后,hibernate认为结果集是可赎回的...
阿门……

热点排行