Spring Boot Setup:org.hibernate.HibernateException:没有配置CurrentSessionContext

时间:2015-01-20 16:01:45

标签: spring-boot

您好我有一个小的Spring Boot设置和访问我的数据库的问题。

这是我从Controller开始的安装程序:

@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尝试访问数据库时,我得到一个例外:

&#39; org.hibernate.HibernateException:没有配置CurrentSessionContext&#39;

我非常在Stackoverflow上搜索,发现问题是Spring无法打开CurrentSessionContext。我可以手动执行此操作,但我希望Spring-Boot处理我的事务。有没有人认出我在设置中的错误?

我已经尝试坚持这个解决方案:Stackoverflow

非常感谢!

1 个答案:

答案 0 :(得分:5)

将以下内容添加到我的应用程序设置中对我有用:

spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext

请参阅以下内容:No CurrentSessionContext configured