我已经能够在hibernate中执行存储过程来将结果查询映射到Java Bean中。如何从Hibernate执行INSERT的SQL Server存储过程?
例如,我有这个文件称为Profesor.hbm.xml:
<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>
然后在我的PROFESOR类我有以下代码:
SessionFactory sf = new Configuration().configure().buildSessionFactory();
session = sf.getCurrentSession();
public List <Profesor> getProfesors(String idTT){
session.beginTransaction();
query.setString("idTT", idTT);
return query.list();
}
此作品完美,我有没问题,存储过程会执行,并将结果填入名为Profesor的模型类。
现在我有另一个存储过程插入数据在数据库中创建一个新的Profesor。
我想这样的事情没有成功:
session.beginTransaction();
Connection c = session.connection();
CallableStatement cs = c.prepareCall("{call addProfesor(?,?,?)}") ;
cs.setString(1, "George");
cs.setString(2, "Williams");
cs.setString(3, "Mathematics");
cs.executeUpdate();
,它甚至没有告诉我一个错误信息,数据就不会插入。 我也读取只是想有一个<“SQL查询”>标签,有一个<“的SQL插入”> 但我看不到的方式来调用<“SQL-插入”>因为它没有像sql-query那样的“name”属性。
随着<“SQL查询”>我们可以这样做:
Query query =session.getNamedQuery("getProfesors");
就像我之前表现,但由于SQL-插入可是没有这个属性的名字,我不知道该怎么做。我也被迫使用存储过程,因为它是一个非常特殊的要求,否则我会使用其他Hibernate持久性功能。
任何帮助将非常感激。
这是非常很难配置ORM使用存储过程来处理所有事情。我只是说你不应该这样做。 – 2012-04-05 05:23:18