Hibernateを使用してOracleストアドプロシージャを実行しようとしました。これは生産用ではなく、私が追求しているJavaソース解析プロジェクト用です。簡単に言えば、Oracle Stored Procから値を返すことはできません。HibernateでOracleストアドプロシージャを実行する
私はSO、Hibernateコミュニティ/ドキュメンテーション(ネイティブSQLの章)のリンクからすべての関連リンクを検索して読んでいますが、何らかの形でそれらを動作させることができませんでした。私の出典は以下のとおりです。関連する部分だけを含めています。
マイエンティティクラス。 PL/SQL OUTパラメータの最初のパラメータを予約しました。
Login.java
@NamedNativeQuery(
name = "getLoginDet",
query = "call GET_LOGIN_DET(?,:userId)",
resultClass = Login.class)
@Entity
@Table(name = "T_LOGIN_DET")
public class Login {
オラクルPROCストアド:GET_LOGIN_DET.sql
。最初のパラメータは、Hibernateスペック
create or replace PROCEDURE GET_LOGIN_DET(listLogin OUT SYS_REFCURSOR,userId IN VARCHAR2)
AS
BEGIN
OPEN listLogin FOR
SELECT *
FROM T_LOGIN_DET
WHERE USER_ID = userId;
END GET_LOGIN_DET;
マイDAOクラスごとにOUT REFCURSOR
です:私は最初のを無視して、唯一の名前付きパラメータを結合していますか?名前付きクエリで
Session session = sessionFactory.openSession();
List results = session.getNamedQuery("getLoginDet").setParameter("userId", u.getUserId()).list();
私にHibernateコンフィグ
<bean id="mysessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configurationClass">
<value>org.hibernate.cfg.AnnotationConfiguration</value>
</property>
<property name="annotatedClasses">
<list>
<value>com.cogn.gto.sea.employee.entity.Employee</value>
<value>com.cogn.gto.sea.employee.entity.Department</value>
<value>com.cogn.gto.sea.login.entity.User</value>
<value>com.cogn.gto.sea.login.entity.Login</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
<!-- <prop key="hibernate.hbm2ddl.auto">update</prop> -->
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
しかし、私はいつも
休止QueryException /ジャワのSQLExceptionで終わるExpected positional parameter count: 1, actual parameters: [] [{call GET_LOGIN_DET(?,:userId)}]
私は無駄に{? = call GET_LOGIN_DET(:userId)}
、call GET_LOGIN_DET(?,:userId)
のバリエーションを試してみました。私の要件は、私がリストしたプロシージャを呼び出し、その結果をDAOクラスに戻すことです。誰かが私をここに逃しているものに導くことはできますか?
これは完璧に動作します。キーはQueryHintで、2つのパラメータが必要です。ありがとうございました。 – user2795418