4

私はこれについてこことオンラインでいくつかの質問を見ましたが、それらは私が受け取っているエラーメッセージと完全には一致していないようです。

私はデータベースを処理するためにコード内でJPAアノテーションを使用しています。@PersistenceContextアノテーションを使用して、エンティティマネージャーを構成します。これは、永続性xmlに複数の永続性ユニットを追加するまではすべてうまく機能します。それなら電話したい

@PersistenceContext(unitName = "myPU")

その後、myPUという名前のBeanが見つからなかったという問題が発生していました。

私はpersistence.xmlから2番目の永続性ユニットを実際に削除し、基本的に1つの永続性ユニットを名前で参照しようとしています(これは必要ないことはわかっていますが、別のpuを追加するとそうなります)。

私のpersistence.xmlは

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 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">
<persistence-unit name="myPU" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>jdbc/mycore</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
    </properties>
</persistence-unit>

私のcore-context.xmlは

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xmlns:jee="http://www.springframework.org/schema/jee"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context  
   http://www.springframework.org/schema/context/spring-context-3.0.xsd  http://www.springframework.org/schema/tx  http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
   http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">

<context:annotation-config/>

<context:component-scan base-package="com.mine.model"/>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor">
    <property name="persistenceUnits">
        <map>
            <entry key="myPU" value="jdbc/mycore"/>

        </map>
    </property>
</bean>
<bean class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<tx:jta-transaction-manager/>
<tx:annotation-driven/>

<jee:jndi-lookup id="entityManagerFactory" jndi-name="jdbc/mycore"/>

私が得る正確なエラーは

Error occurred during deployment: Exception while loading the app :  java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myfirstbean': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'myPU' is defined. Please see server.log for more details. 

現在、Glassfishにデプロイしようとしています。

誰か助けてもらえますか?私はここで非常に基本的なものが欠けていると確信しています

ありがとう

編集

私はMasterSlaveが与えた答えを試しましたが、残念ながらこれは機能しませんでした。

@PersistenceContext(unitName = "myPU", name="jdbc/mycore")
4

1 に答える 1

2

core-context.xmlファイルをクリーンアップし、不要な行をいくつか削除することで、これを実現することができました。これは特に便利だと思いました

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" ... and some more stuff>

   <context:annotation-config/>
   <context:component-scan base-package="com.my.model"/>

   <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
   <tx:jta-transaction-manager/>
   <tx:annotation-driven/>

   <jee:jndi-lookup id="corePU" jndi-name="jdbc/mycore"/>
</beans>
于 2012-12-21T14:58:51.720 に答える