2013-02-28 7 views
0

В моем приложении у меня есть DAO-компонент, который я вставляю с помощью Hibernate sessionFactory (с настройкой пула c3p0) через Spring. Мой SessionFactory фасоль определяется следующим образом:Hibernate DAO/SessionFactory Use

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
... 
</bean> 

Что лучше практика и/или лучшую производительность для использования оберточной DAO боб в резьбовом среде? Должен ли я определить его как одноэлементный компонент и позволить ему делиться между потоками, полагаясь на безопасность потоков sessionFactory? Или я должен создать отдельный экземпляр DAO для каждого потока? Это даже имеет значение?

ответ

3

Если у ваших DAO нет каких-либо полей-членов, кроме SessionFactory, используйте их как Singleton, переданные всем потокам.

Обычная практика с Spring заключается в том, чтобы аннотировать вашу реализацию DAO с помощью @Repository и @Autowired экземпляра в ваш сервис или другие классы, которые должны его использовать.

SessionFactory#openSession() и SessionFactory#getCurrentSession() возвращают новый экземпляр сеанса и локальный сеанс потока, соответственно, поэтому ничто не разделяется между потоками.