【发布时间】:2017-11-20 07:07:48
【问题描述】:
我正在使用 SpringBoot 创建一个 Web 应用程序。在我的应用程序中,我有 RestController 层,它将调用服务层,而服务层又将调用 DAO 层。 我的服务层用 @Transactional(Spring transaction) 注释
我已经使用 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() 将始终返回新会话,因为休眠会话不是线程安全的。
P.S 由于某些特定原因,我不想使用 Spring Data JPA
【问题讨论】:
标签: java spring hibernate spring-boot