Spring 启动设置:org.hibernate.HibernateException:未配置 CurrentSessionContext
Spring Boot Setup: org.hibernate.HibernateException: No CurrentSessionContext configured
您好,我有一个小 Spring 启动设置和访问我的数据库的问题。
这是我的设置,从控制器开始:
@Controller
@RequestMapping("/myproject/users")
public class UserController {
private static Logger logger = LoggerFactory
.getLogger("UserController.class");
private UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
....
这是我的 DAO,他用所有 CRUD 方法扩展了一个抽象 DAO:
@Repository
@Transactional
public class UserDaoImpl<T> extends AbstractDAO<User, Integer> implements
UserDao {
@Autowired
public UserDaoImpl(SessionFactory sessionFactory) {
super(sessionFactory);
}
protected Class<User> getEntityClass() {
return User.class;
}
public User getUserByMail(String email) {
User result = null;
Criteria criteria = getCriteria();
criteria.add(Restrictions.eq("email", email));
if (criteria.uniqueResult() != null) {
result = (User) criteria.uniqueResult();
}
return result;
}
protected final Session getCurrentSession() {
return this.sessionFactory.getCurrentSession();
}
.....
最后是服务:
@Component
@Transactional
public class UserServiceImpl implements UserService {
private UserDao userDao;
@Autowired
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}
public List<User> getAllUsers() {
return this.userDao.findAll();
}
....
这是我的应用程序设置:
spring.datasource.url=jdbc:mysql://10.0.0.15:3306/schema
spring.datasource.username=test
spring.datasource.password=test
# Hibernate
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create
# Tomcat
server.port = 9080
这是我的 Application.java:
@Configuration
@ComponentScan({"core", "controller"})
@EnableAutoConfiguration
public class Application
{
public static void main(String[] args) {
....
}
@Bean
public SessionFactory sessionFactory(HibernateEntityManagerFactory hemf) {
return hemf.getSessionFactory();
}
....
我现在的问题是,Sessionfactory 已正确构建,所有 bean 都已加载,但是当我的 DAO 尝试访问数据库时,出现异常:
'org.hibernate.HibernateException: No CurrentSessionContext configured'
我在 Whosebug 上搜索了很多,发现问题是 Spring 无法打开 CurrentSessionContext。我可以手动执行此操作,但我希望 Spring-Boot 处理我的交易。有没有人认识到我在设置中的错误?
我已经尝试坚持这个解决方案:Whosebug
非常感谢!
将以下内容添加到我的应用程序设置中对我有用:
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext
参考以下内容:No CurrentSessionContext configured
您好,我有一个小 Spring 启动设置和访问我的数据库的问题。
这是我的设置,从控制器开始:
@Controller
@RequestMapping("/myproject/users")
public class UserController {
private static Logger logger = LoggerFactory
.getLogger("UserController.class");
private UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
....
这是我的 DAO,他用所有 CRUD 方法扩展了一个抽象 DAO:
@Repository
@Transactional
public class UserDaoImpl<T> extends AbstractDAO<User, Integer> implements
UserDao {
@Autowired
public UserDaoImpl(SessionFactory sessionFactory) {
super(sessionFactory);
}
protected Class<User> getEntityClass() {
return User.class;
}
public User getUserByMail(String email) {
User result = null;
Criteria criteria = getCriteria();
criteria.add(Restrictions.eq("email", email));
if (criteria.uniqueResult() != null) {
result = (User) criteria.uniqueResult();
}
return result;
}
protected final Session getCurrentSession() {
return this.sessionFactory.getCurrentSession();
}
.....
最后是服务:
@Component
@Transactional
public class UserServiceImpl implements UserService {
private UserDao userDao;
@Autowired
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}
public List<User> getAllUsers() {
return this.userDao.findAll();
}
....
这是我的应用程序设置:
spring.datasource.url=jdbc:mysql://10.0.0.15:3306/schema
spring.datasource.username=test
spring.datasource.password=test
# Hibernate
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create
# Tomcat
server.port = 9080
这是我的 Application.java:
@Configuration
@ComponentScan({"core", "controller"})
@EnableAutoConfiguration
public class Application
{
public static void main(String[] args) {
....
}
@Bean
public SessionFactory sessionFactory(HibernateEntityManagerFactory hemf) {
return hemf.getSessionFactory();
}
....
我现在的问题是,Sessionfactory 已正确构建,所有 bean 都已加载,但是当我的 DAO 尝试访问数据库时,出现异常:
'org.hibernate.HibernateException: No CurrentSessionContext configured'
我在 Whosebug 上搜索了很多,发现问题是 Spring 无法打开 CurrentSessionContext。我可以手动执行此操作,但我希望 Spring-Boot 处理我的交易。有没有人认识到我在设置中的错误?
我已经尝试坚持这个解决方案:Whosebug
非常感谢!
将以下内容添加到我的应用程序设置中对我有用:
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext
参考以下内容:No CurrentSessionContext configured