Hibernate没有找到具有该名称的@NamedStoredProcedureQuery

Lez*_*rte 4 java spring hibernate

我试图使用hibernate的实体管理器从db2数据库调用存储过程,并将结果作为对象返回.我正在使用hibernate似乎找不到的@NamedStoredProcedureQuery注释.我收到错误:"没有找到具有该名称的@NamedStoredProcedureQuery:Create_Division".任何想法都会很棒.

豆子:

<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>
Run Code Online (Sandbox Code Playgroud)

查询输出对象:

@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;

}
Run Code Online (Sandbox Code Playgroud)

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();
Run Code Online (Sandbox Code Playgroud)

编辑:所以我添加了@Entity并确实修复了原始错误,但输出参数仍未映射到CreateDivisionResult对象.我只能使用query.getOutputParameterValue获取每个单独的字段.这只是JPA的限制吗?

kuh*_*yan 7

@NamedStoredProcedureQuery应该应用于Entity类或映射类

似乎你错过了'CreateDivisionResult'中的@Entity

  • 如果 NamedStoredProcedure 未绑定到特定实体,而是在数据库中设置对多个实体有效的状态怎么办?我们肯定不会在每个实体类中复制它吗?如果我将它分成一个类,它会抱怨它找不到 NSP。如果我将其设为实体,则它希望我设置一个 @Id。我没有,它不是一个实体...... (2认同)