0

アノテーションではなくXMLを介したエンティティマネージャーの挿入で説明されていることと非常によく似た処理を行う必要がありますが、実際の@PersistenceContextがあるかのように動作するように、実際のコンテナー作成エンティティマネージャーをXMLから挿入する必要があります。注釈。LocalEntityManagerFactoryBean(「コンテナ」という単語が欠落していることに注意)を見つけましたが、新しいエンティティマネージャファクトリが作成されるため、エンティティマネージャは実際の@PersistenceContextアノテーションを介して注入されたものと互換性がありません。

それは奇妙で、おそらく私の問題の解決策は完全に異なるアプローチを選択することであるため、その理由を説明します。Spring構成でPropertyPlaceholderConfigurerを使用しており、この構成では他のBeanを参照しています。これらの参照されたBeanで自動配線が機能しないというバグが発生しています。PropertyPlaceholderConfigurerがこれらの参照されたBeanの自動配線をオフにする理由と方法はわかりませんが、実際には、これらのBeanの自動配線をxml構成に置き換えると、すべてが機能します。しかし、EntityManagerの自動配線を置き換えることはできません。これは、標準のSpring Beanではないためですが、完全には理解していないものをjndiでロードしました。

いずれにせよ、いくつかの解決策はありますか?

4

2 に答える 2

0

spring-bean.xml で、

<bean id="entityManagerFactory"  class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="USER_TEST"/>
    <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/>
    <property name="jpaDialect">
        <bean class="org.springframework.orm.jpa.vendor.EclipseLinkJpaDialect"/>
    </property>
    <property name="jpaPropertyMap">
        <props>
            <prop key="eclipselink.weaving">false</prop>
        </props>
    </property>

<bean id="PersonDao" class="com.xxx.java.person.persistence.PersonDAO">
     <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
于 2012-09-05T11:53:27.287 に答える
0
<bean id="earlyInitializedApplicationSettingsService" class="...services.impl.ApplicationSettingsServiceImpl" autowire-candidate="false">
    <property name="applicationSettingsDao">
        <bean class="....impl.ApplicationSettingsDaoImpl">
            <property name="entityManager">
                <bean class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
                    <property name="entityManagerFactory">
                        <bean class="org.springframework.jndi.JndiObjectFactoryBean">
                            <property name="jndiName" value="java:comp/env/persistence/somePersistenceUnit"/>
                        </bean>
                    </property>
                </bean>
            </property>
        </bean>
    </property>
</bean>

主に、標準の jee:jndi-lookup を使用していないことに注意してください。これは (PropertyPlaceholderConfigurer によって作成された条件では) 機能せず、それが私の混乱の原因でした。直接 JndiObjectFactoryBean を使用すると、機能しました。

于 2012-09-12T10:27:44.310 に答える