2016-03-23 7 views
0

JPAをHibernate実装で使用し、JpaTransactionManagerを使用してトランザクションを管理しています。JpaTransactionManagerでトランザクション境界が正しく設定されていない

以下

は、私が使用を開始

Query q = entityManager.createQuery(
      "SELECT cc.component FROM " 
        + this.typeParameterClass.getSimpleName() 
        + " cc WHERE cc.caseload.id = ? ").setParameter(1, 
      caseloadId); 

    Collection<Component> ddd =q.getResultList(); 
    for (Component c : ddd) { 
     System.out.println(c.getComponentId()); 
     System.out.println(c.getComponentRelationships2()); 
    } 
    return ddd; 

以下のように私はDAO層にクエリを実行

@Service 
@Transactional 
public class ComponentService { 

以下のように私のサービスクラスを定義している私のアプリケーションのコンテキストファイル

<bean id="persistenceUnitManager" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager"> 
    <property name="persistenceXmlLocations"> 
     <list> 
      <value>classpath*:META-INF/persistence.xml</value> 
     </list> 
    </property> 
    <property name="defaultDataSource" ref="dataSource" /> 
</bean> 

<bean id="entityManagerFactory" primary="true" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceUnitManager" ref="persistenceUnitManager" /> 
    <property name="persistenceUnitName" value="infra_services" /> 
</bean> 

<bean 
    class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 

<tx:annotation-driven transaction-manager="transactionManager" 
    proxy-target-class="true" /> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    <property name="jpaDialect"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" /> 
    </property> 
</bean> 

ですクエリを選択します。実行中にSystem.out.println(c.getComponentRelationships2());could not initialize proxy - no Session] with root cause例外を取得する

ここでセッションが利用できない理由がわかりません。これで私を助けてください。

+0

あなたのサービスは、を定義するのと同じコンテキストにありますか? – JEY

+0

サービスは同じコンテキストではありません。しかし、私はクエリを実行するとすぐにダオ層でもこの例外が発生します –

+1

xml設定ファイルに ''がありますか? – VinayVeluri

答えて

1

あなたのサービスが<tx:annotation-driven />と同じコンテキストでない場合、それは機能しません。同じコンテキストでBeanのみを検索するためです。春のドキュメントから抽出します。

@EnableTransactionManagementとだけ彼らはで定義されている同じアプリケーションコンテキスト内のBeanに@Transactionalを探します。これは、あなたが注釈を入れた場合のDispatcherServletのためにWebApplicationContextで設定を駆動する、ことを意味し、それだけあなたのコントローラではなく@Transactional Beanをチェックします。詳細は、第21.2項「DispatcherServlet」を参照してください。

+0

ありがとう!!!また、私のapplciationコンテキストにを追加して問題を解決しました –

関連する問題