hibernateのエンティティ・マネージャを使用してdb2データベースからストアド・プロシージャを呼び出して、結果をオブジェクトとして返そうとしています。私は、@ NamedStoredProcedureQuery注釈を使用していますが、これは休止状態では見つからないようです。私はエラーを取得しています: "その名前で@NamedStoredProcedureQueryが見つかりませんでした:Create_Division"。どんなアイデアも素晴らしいだろう。Hibernateいいえ@ NamedStoredProcedureQueryがその名前で見つかりました
豆:
<bean id="entityManagerFactoryBean" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="demoJPAUnit" />
<property name="packagesToScan">
<list>
<value>com.merchantBoarding.db2.queryObjects</value>
</list>
</property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.archive.autodetection">class,hbm</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.DB2Dialect</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactoryBean" />
</bean>
クエリ出力オブジェクト:
@NamedStoredProcedureQuery(
name="Create_Division",
procedureName="MD.PMDBD017",
resultClasses = {CreateDivisionResult.class},
parameters={
@StoredProcedureParameter(name="IN_ENTY",mode=ParameterMode.IN,type=Integer.class),
@StoredProcedureParameter(name="IN_PARNT_ENTY",mode=ParameterMode.IN,type=Integer.class),
@StoredProcedureParameter(name="IN_ACTION",mode=ParameterMode.IN,type=String.class),
@StoredProcedureParameter(name="IN_ENTY_XREF",mode=ParameterMode.IN,type=String.class),
@StoredProcedureParameter(name="OUT_ENTY",mode=ParameterMode.OUT,type=Integer.class),
@StoredProcedureParameter(name="OUT_ID",mode=ParameterMode.OUT,type=String.class),
@StoredProcedureParameter(name="OUT_ENTY_XREF",mode=ParameterMode.OUT,type=String.class),
@StoredProcedureParameter(name="OUT_SQLCODE",mode=ParameterMode.OUT,type=Integer.class),
@StoredProcedureParameter(name="OUT_STATUS",mode=ParameterMode.OUT,type=String.class),
@StoredProcedureParameter(name="OUT_ERRORTEXT",mode=ParameterMode.OUT,type=String.class),
}
)
public class CreateDivisionResult implements Serializable {
@Id
public String OUT_ENTY;
public String OUT_ID;
public String OUT_ENTY_XREF;
public String OUT_SQLCODE;
public String OUT_STATUS;
public String OUT_ERRORTEXT;
}
DAOコード:
StoredProcedureQuery query = manager.createNamedStoredProcedureQuery("Create_Division");
query.setParameter("IN_ENTY", 111);
query.setParameter("IN_PARNT_ENTY", 11111);
query.setParameter("IN_ACTION", "CREATE");
query.setParameter("IN_ENTY_XREF", "ED");
List<CreateDivisionResult> results = query.getResultList();
EDIT: は、だから私は@Entityを追加し、それが元のエラーを修正しました、出力パラメータはまだCreateDivisionResultオブジェクトにはマッピングされていません。私は各個別フィールドをquery.getOutputParameterValueで得ることができます。これはJPAの制限ですか?
おかげで@Entityが欠落しているようです。だから、@Entityはクラスをデータベースの特定のテーブルに結びつけていることを理解していました。この状況では、出力フィールドはどのテーブルからも来ていません。それらはストアドプロシージャ自体から生成されたものです。それはまだ@Entityを使用する状況ですか? – Lezorte
はい、あなたはまだ – kuhajeyan