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