2

@PersistenceContextエンティティ マネージャは、コンテナの起動中に処理したと思われるエンティティ クラスを見つけることができません。

持続性ユニットのセットアップ中に、コンテナがエンティティを見つけて登録しているように見えます。

2012-05-17 15:28:21,978 INFO  [org.hibernate.cfg.annotations.Version] (main) Hibernate Annotations 3.4.0.GA
2012-05-17 15:28:21,997 INFO  [org.hibernate.annotations.common.Version] (main) Hibernate Commons Annotations 3.1.0.GA
2012-05-17 15:28:22,004 INFO  [org.hibernate.ejb.Version] (main) Hibernate EntityManager 3.4.0.GA
2012-05-17 15:28:22,039 INFO  [org.hibernate.ejb.Ejb3Configuration] (main) Processing 
PersistenceUnitInfo [
    name: dashboardPu
    ...]
2012-05-17 15:28:22,069 WARN  [org.hibernate.ejb.Ejb3Configuration] (main) Persistence provider caller does not implement the EJB3 spec correctly. PersistenceUnitInfo.getNewTempClassLoader() is null.
2012-05-17 15:28:22,146 INFO  [org.hibernate.cfg.AnnotationBinder] (main) Binding entity from annotated class: scholastic.dashboard.dto.ReportRequest
2012-05-17 15:28:22,161 INFO  [org.hibernate.cfg.annotations.QueryBinder] (main) Binding Named query: ReportRequest.getReportsByUser => from ReportRequest where userId = :userId

ただし、後でそのエンティティを使用しようとすると失敗します。entitymanager が実際に dashboardPu を使用していることを確認しました (この ear には 3 つの永続化ユニットがあります)。

2012-05-17 15:28:54,730 DEBUG [org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter] (http-127.0.0.1-8080-2) Opening JPA EntityManager in OpenEntityManagerInViewFilter
2012-05-17 15:28:54,731 DEBUG [org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter] (http-127.0.0.1-8080-1) Using EntityManagerFactory 'dashboardEntityManagerFactory' for OpenEntityManagerInViewFilter
2012-05-17 15:28:54,731 DEBUG [org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter] (http-127.0.0.1-8080-1) Opening JPA EntityManager in OpenEntityManagerInViewFilter
2012-05-17 15:28:54,775 DEBUG [scholastic.dashboard.dao.ReportRequestDao] (http-127.0.0.1-8080-2) Get reports for secretuserid
2012-05-17 15:28:54,797 WARN  [org.hibernate.hql.QuerySplitter] (http-127.0.0.1-8080-2) no persistent classes found for query class: from scholastic.dashboard.dto.ReportRequest where user_id = secretuserid

"ReportRequest.getReportsByUser"最初に を使用してクエリを見つけることができずem.createNamedQuery()、次にエンティティ クラスへのフル パス名を使用せずにクエリを試行し、次にfrom ReportRequest where userId = :userId上記の最後のコード ブロック行でクエリを試行して、ここにたどり着きました。

JBoss 5.1、JPA 2、Hibernate 3.3 または 3.6、Spring 3.0.5 を使用。

コード スニペット:

@Entity
@Table(name="td_report_request")
@NamedQueries({
@NamedQuery(name=ReportRequestDao.GET_REPORTS_BY_USER, 
        query="from ReportRequest where userId = :userId"),
})
public class ReportRequest extends SlmsGuidAbstract {...}

...
@Repository
public class ReportRequestDao {

    @PersistenceContext
    private EntityManager em;

    public List<ReportRequest> getReportRequests(String userId) {
    // TODO uncomment this line and remove the one after when we go to JBoss >= 6
//      TypedQuery<ReportRequest> query = em.createNamedQuery(GET_REPORTS_BY_USER, ReportRequest.class);
//      Query query = em.createNamedQuery(GET_REPORTS_BY_USER);
    Query query = em.createQuery("from scholastic.dashboard.dto.ReportRequest where user_id = " + userId);

...
<bean id="dashboardEntityManagerFactory"
      class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
      <property name="dataSource" ref="lycea.ds.jndi-MySqlDS" />
      <property name="persistenceUnitName" value="dashboardPu"/>
</bean>
...
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
         version="2.0">
<persistence-unit name="dashboardPu" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>java:/MySqlDS</jta-data-source>
    <properties>
        <property name="jboss.entity.manager.factory.jndi.name" value="java:/dashboardPu"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
        <property name="hibernate.query.factory_class" value="org.hibernate.hql.ast.ASTQueryTranslatorFactory"/>
        <property name="hibernate.connection.release_mode" value="auto"/>
        <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup" />
        <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
</persistence-unit>
</persistence>
4

1 に答える 1

0

persistance.xmlタグ内に注釈付きのjpaクラスを追加してみてください<class/>

于 2012-10-17T13:41:33.747 に答える