@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 и лениво загружается.Весна Данные lazyload не LazyInitializationException
В приведенном выше коде
classARepo.findOne(1);
Выполнение правильно. но
List<ClassB> list = classA.getClassBs();
list.size();
Fails with LazyInitializationException.
Instance для Теста создается как один ниже
@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'? Возможно, вы закрываете сессию после возвращения объекта. –