1
@Component
@Transactional
public class TestClass extends AbstractClass
{
@Autowire
ClassARepo classARepo;
@Override
public void test() {
ClassA classA = classARepo.findOne(1);
List<ClassB> list = classA.getClassBs();
list.size();
}
}
ClassB被映射爲onetomany並且被延遲加載。Spring Data lazyload不LazyInitializationException
在上面的代碼
classARepo.findOne(1);
正確執行。但是
List<ClassB> list = classA.getClassBs();
list.size();
因LazyInitializationException失敗。
的種皮實例被創建像下面
@PersistJobDataAfterExecution
@DisallowConcurrentExecution
@Transactional
@Component
public class TestClassJOB extends AbstractJob
{
@Autowired
TestClass indexer;
}
背景下的一個:
<!-- JPA mapping configuration -->
<bean id="persistenceXmlLocation" class="java.lang.String">
<constructor-arg value="classpath:/persistence.xml"></constructor-arg>
</bean>
<!-- entity manager -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:dataSource-ref="dataSource" p:persistenceUnitName="jpaData"
p:persistenceXmlLocation-ref="persistenceXmlLocation">
<property name="packagesToScan" value="com..persist.entity" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
</bean>
<!-- transaction manager -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"
p:entityManagerFactory-ref="entityManagerFactory" lazy-init="true" p:dataSource-ref="dataSource" />
<!-- JPA repositories -->
<jpa:repositories base-package="com..persist.repo"
entity-manager-factory-ref="entityManagerFactory" transaction-manager-ref="transactionManager" />
我試了很多資源,解決不了問題。將顯示以下錯誤消息「無法初始化代理 - 沒有會話」。
問題的原因是什麼? 當調用classARepo.findOne(1)時會話可用時,爲什麼在懶取(list.size())期間不可用?
代碼顯示ClassARepo的代碼固定的問題。顯示你如何獲得TestClass的一個實例。顯示你的上下文是如何配置的。 –
@JBNizet我已添加請求的詳細信息 – Edi
您介意向我們展示方法'findOne'的代碼嗎?也許你在返回對象後關閉會話。 –