私は、結果クエリをJava Beanにマッピングするために、hibernateでストアドプロシージャを実行することができました。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という名前のモデルクラスに結果が設定されます。
今私はデータベースに新しい教授を作成するためにデータを挿入する別のストアドプロシージャを持っています。
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-query">タグのように、< "sql-insert"> が読まれましたが、それを呼び出す方法がわかりません< "sql-insert">なぜなら、sql-queryのように "name"属性を持たないからです。私は前に示したと同じようにQuery query =session.getNamedQuery("getProfesors");
を、しかし、SQL-挿入doesntのは、その属性名を持っているので、私はどのように行うのか分からない:
は<「SQLクエリ」で>我々は行うことができます。私はまた、非常に特別な要件であるためストアドプロシージャを使用することを余儀なくされました。そうでなければ、他のHibernate永続性機能を使用していました。
本当にありがとうございます。
それは非常にありますすべてのストアドプロシージャを使用するようにORMを構成するのは複雑です。私はちょうどあなたが選択によってこれを行うべきではないことを意味します。 –