我正在使用SpringBoot创建一个Web应用程序。在我的应用程序中,我有RestController层,它将调用Service Layer,而Service Layer又将调用DAO层。 我的服务层使用@Transactional(Spring事务)
进行注释我使用Generic DAO Hibernate实现了DAO层
public class Dao{
@Autowired(name = "sessionFactory")
private SessionFactory sessionFactory;
public <T> T save(final T o){
return (T) sessionFactory.getCurrentSession().save(o);
}
public void delete(final Object object){
sessionFactory.getCurrentSession().delete(object);
}
/***/
public <T> T get(final Class<T> type, final Long id){
return (T) sessionFactory.getCurrentSession().get(type, id);
}
/***/
public <T> T merge(final T o) {
return (T) sessionFactory.getCurrentSession().merge(o);
}
/***/
public <T> void saveOrUpdate(final T o){
sessionFactory.getCurrentSession().saveOrUpdate(o);
}
}
在application.properties中,我有 spring.jpa.properties.hibernate.current_session_context_class = org.springframework.orm.hibernate4.SpringSessionContext
所以我担心的是多个并发请求何时进入我的REST控制器 我是否需要将服务层bean / DAO图层bean的范围保留为原型? 另外,我是否需要同步DAO层中的方法?或者getCurrentSession()将始终返回新会话,因为hibernate会话不是线程安全的。
P.S由于某些特定原因,我不想使用Spring Data JPA
答案 0 :(得分:0)
所以我担心的是多个并发请求何时进入我的REST Controller我是否需要保留服务层bean / DAO层的范围 豆子作为原型?
另外,我是否需要同步DAO层中的方法?要么 getCurrentSession()将始终返回自hibernate以来的新会话 session不是线程安全的。
您将会话作为Spring Bean,默认情况下是Singleton,因此所有请求只有一个实例。
您是否考虑过使用spring-rest-data项目?