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
例外を取得する
ここでセッションが利用できない理由がわかりません。これで私を助けてください。
あなたのサービスは、 を定義するのと同じコンテキストにありますか? –
JEY
サービスは同じコンテキストではありません。しかし、私はクエリを実行するとすぐにダオ層でもこの例外が発生します –
xml設定ファイルに ' 'がありますか? –
VinayVeluri