我已經能夠在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