Sql server 如何从Hibernate执行用于插入的SQL Server存储过程?
我已经能够在hibernate中执行一个存储过程,将结果查询映射到JavaBean中 例如,我有一个名为Profesor.hbm.xml的文件:Sql server 如何从Hibernate执行用于插入的SQL Server存储过程?,sql-server,sql-server-2008,hibernate,stored-procedures,jdbc,Sql Server,Sql Server 2008,Hibernate,Stored Procedures,Jdbc,我已经能够在hibernate中执行一个存储过程,将结果查询映射到JavaBean中 例如,我有一个名为Profesor.hbm.xml的文件: <hibernate-mapping> <class name="model.Profesor" table="Profesor" catalog="dbo"> <id name="idProfesor" type="int"> <colu
<hibernate-mapping>
<class name="model.Profesor" table="Profesor" catalog="dbo">
<id name="idProfesor" type="int">
<column name="idProfesor" />
<generator class="assigned" />
</id>
<property name="Nombre" type="string">
<column name="Nombre" length="25" not-null="false" />
</property>
<property name="ApellidoP" type="string">
<column name="ApellidoP" length="20" not-null="false" />
</property>
<property name="ApellidoM" type="string">
<column name="ApellidoM" length="20" not-null="false" />
</property>
</class>
<sql-query name="getProfesors" callable="true">
<return alias="getProfesors" class="model.Profesor">
<return-property name="idProfesor" column="idProfesor"/>
<return-property name="Nombre" column="Nombre"/>
<return-property name="ApellidoP" column="ApellidoP"/>
<return-property name="ApellidoM" column="ApellidoM"/>
</return>
exec getProfesors :idTT
</sql-query>
</hibernate-mapping>
它甚至没有向我显示错误消息,数据就是无法插入。
我还读到,就像有一个标签,有一个
但是我看不到调用它的方法,因为它不像sql查询那样具有“name”属性
有了这些,我们可以做:
Query query =session.getNamedQuery("getProfesors");
正如我之前所展示的,但是由于sql insert没有那个属性名,我不知道如何做。我还被迫使用存储过程,因为这是一个非常特殊的要求,否则我会使用其他Hibernate持久性特性
非常感谢您的帮助。您可以为插入、更新和删除指定“自定义sql”。看看吧
这些不是命名查询。当Hibernate插入、更新或删除此实体时,始终使用它们。另一种方法是从准备好的语句调用存储的proc。如果存储过程更新多个记录(批更新),这可能非常有用 但请注意:自hibernate 3.2.4()以来,hibernate会话的connection()方法已被弃用 我们可以暂时使用以下替代方法:
PreparedStatement ps = ((SessionFactoryImplementor)sessionFactory).getConnectionProvider()
.getConnection().prepareStatement("{exec sp_batchRateUpdate}");
ps.execute();
将ORM配置为使用存储过程处理所有事情是非常复杂的。我的意思是你不应该选择这样做。我检查了文档,并尝试修改我的Profesor.hbm.xml,在标记中添加以下代码行:{call addProfesor(?,,,,?,?)},但我不知道如何从Java代码中调用它,请帮助我,我找不到任何这样的示例,你能带我去个地方吗?你不是直接从java叫它的。插入实体时,始终会调用它。
Query query =session.getNamedQuery("getProfesors");
PreparedStatement ps = getSession().connection().prepareStatement("{exec sp_batchRateUpdate}");
ps.execute();
PreparedStatement ps = ((SessionFactoryImplementor)sessionFactory).getConnectionProvider()
.getConnection().prepareStatement("{exec sp_batchRateUpdate}");
ps.execute();