Я создаю систему, в которой каждый запрос с клиентской стороны генерирует несколько потоков на стороне сервера. Затем каждый поток использует один или несколько DAO (некоторые DAO могут использоваться более чем одним потоком в то время). Все DAO вводятся (@Autowired
) в мои классы потоков весной. Каждый DAO принимает также SessionFactory
.Управление сеансом Spring + Hibernate для нескольких потоков
Что было бы правильным способом управления сеансами Hibernate через эти множественные DAO, чтобы я не столкнулся с проблемами из-за многопоточной среды (например, несколько DAO из разных потоков пытались использовать один и тот же сеанс одновременно)?
Было бы достаточно, чтобы указать hibernate.current_session_context_class=thread
в конфигурации Hibernate, а затем каждый раз в DAO просто используйте SessionFactory.getCurrentSession()
для выполнения работы? Будет ли он правильно определять и создавать сеансы на поток при необходимости?
Как насчет закрытия сеанса, когда работа выполнена, это делается автоматически? – MounirReg
Когда вы используете Hibernate с Spring 3 или более поздней версией, вы должны избегать установки этого свойства, поскольку Spring имеет собственную реализацию этого, которая необходима Spring для управления сеансами Hibernate. http://stackoverflow.com/a/18842593/3826713 – UCJava