2016-11-10 2 views
2

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の制限ですか?

答えて

2

@NamedStoredProcedureQueryエンティティクラスまたはマップされたクラス

に適用されるべきであるあなたが、応答のためのあなたの「CreateDivisionResult」

+0

おかげで@Entityが欠落しているようです。だから、@Entityはクラスをデータベースの特定のテーブルに結びつけていることを理解していました。この状況では、出力フィールドはどのテーブルからも来ていません。それらはストアドプロシージャ自体から生成されたものです。それはまだ@Entityを使用する状況ですか? – Lezorte

+0

はい、あなたはまだ – kuhajeyan

関連する問題