Из того, что я читал до сих пор, я понял, что использование транзакций будет решением проблем с ленивой загрузкой в спящем режиме. Сессия будет доступна в течение всей транзакции на уровне обслуживания без дальнейшего простоя.Весенние транзакции и спящий режим: ленивая инициализация
Возможно, я неправильно сконфигурировал управление транзакциями? Я на самом деле новичок, когда дело доходит до весны и спячки, но, может быть, вы, ребята, могли бы мне помочь.
Моя конфигурация:
<bean class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
id="sessionFactory">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
<!-- Hibernate Template bean that will be assigned to DAOs. -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!--
Transaction manager for a single Hibernate SessionFactory (alternative
to JTA)
-->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
Моя реализация DAO бы просто иметь @Repository
аннотацию и Hibernate-template
боб вводится с помощью автоматического связывания.
Типичный заголовок в реализации услуг будет:
@Service
@Transactional(readOnly=true)
public class LeerlingServiceImpl implements LeerlingService {
@Autowired
LeerlingDAO leerlingDAO;
@Autowired
LeerplanDAO leerplanDAO;
С @Service(readOnly=false)
аннотацию, если что-нибудь на самом деле сохранен/обновлено в этом конкретном методе.
Нужно ли мне настроить что-то еще, чтобы убедиться, что я могу загрузить правильные ассоциации в своей службе или это нормально обрабатывается транзакциями?
Прямо сейчас я просто немного запутался, что я на самом деле, поэтому, пожалуйста, помогите мне :)
Использование шаблона не «стандартный» решение, это только один вариант, который на самом деле не рекомендуется с 2007 года Просто впрыснуть 'sessionFactory' и использовать' sessionFactory.getCurrentSession() ', если вы хотите идти шаблон -Меньше. См. [Так что, если вы все еще используете Spring HibernateTemplate и/или JpaTemplate?] (Http://blog.springsource.com/2007/06/26/so-should-you-still-use-springs-hibernatetemplate-andor-jpatemplate /). –
Это довольно ошеломляющая величина косвенности, чтобы обойти вызов sessionFactory.getCurrentSession(). Не знаю, каковы последствия производительности вставки getBean() для каждого вызова метода на сеансе. – Affe
Я использовал расширение класса hibernateDAOSupport в своих DAO (и ввел его.). Но как мне получить доступ к моей сессии в моем сервисе и DAO, или это неестественная вещь? Другие рекомендуют использовать: http://community.jboss.org/wiki/OpenSessioninView; поскольку это связывает сессию с потоком при каждом запросе (так что да: я делаю webapp) – toomuchcs