Spring &引用;未配置CurrentSessionContext";当应用程序尝试在数据库中执行查询时

Spring &引用;未配置CurrentSessionContext";当应用程序尝试在数据库中执行查询时,spring,hibernate,spring-boot,spring-orm,Spring,Hibernate,Spring Boot,Spring Orm,在我当前的spring boot项目中,当我尝试在数据库中执行查询时,通过我的dao类中的这个方法(这是我在这个开发步骤中使用的唯一方法): 我有一个配置类来设置SessionFactorybean: @Configuration public class HibernateConfig { @Bean public HibernateJpaSessionFactoryBean sessionFactory(EntityManagerFactory emf) {

在我当前的spring boot项目中,当我尝试在数据库中执行查询时,通过我的dao类中的这个方法(这是我在这个开发步骤中使用的唯一方法):

我有一个配置类来设置SessionFactorybean:

@Configuration
public class HibernateConfig {
    @Bean
    public HibernateJpaSessionFactoryBean sessionFactory(EntityManagerFactory emf) {
         HibernateJpaSessionFactoryBean factory = new HibernateJpaSessionFactoryBean();
         factory.setEntityManagerFactory(emf);
         return factory;
    }
}

任何人都可以看到我在这里遗漏了什么?

好的,经过更多的搜索,我终于找到了这个问题的解决方案。我解决了将此方法添加到Dao类的问题:

public Session getSessionFactory() {
    try {
        return sessionFactory.getCurrentSession();
    } catch (Exception e) {
        return sessionFactory.openSession();
    }
}
以及更改通话:

sessionFactory.getCurrentSession()
在这些方法中:

getSessionFactory()
更新

我发现另一个解决方案很有用

@Autowired
private EntityManagerFactory factory;

在我的dao类中,以及在每种方法中,使用如下内容:

@Transactional
public void insert(E object) {
    getEntityManager().persist(object);
}

数据库会话的application.properties文件中的读取位置?添加该代码please@Aeseir当我启动应用程序时,spring引导读取application.properties。Oops错过了引导部分。您的hibernate还有其他配置文件吗?因为这个问题通常围绕线程,所以我可以根据用来解决这个问题的XML映射给出一般性的答案。@Aeseir否,hibernate仅配置了上面的application.properties和HibernateCOnfig类。如果您有其他
persistence.xml
和/或
hibernate.cfg.xml
/
hibernate.properties
文件,请添加它们。您仍然使用
会话工厂
有什么原因吗?这里没有什么不能用
EntityManager
来完成的,而是为您省去了配置额外
HibernateAppSessionFactoryBean
的麻烦。我还假设您正在让Spring Boot配置您的
EntityManagerFactory
,而不是您也在黑客攻击来配置它???这不是一个解决方案,而且在您打开非托管会话时存在潜在的危险Spring不会管理这些会话,并且它们保持打开状态。当会话打开时,数据库连接也打开,此“解决方案”可能(并且将)导致连接池不足和事务问题。@M.Deinum我尝试使用EntityManager的另一种方法,如您所建议的。与前一个方案相比,这是一个更好的解决方案吗?我想说的是,没有真正明确的答案。如果您确实需要使用特定于Hibernate的功能,请首先尝试查看是否可以使用
EntityManager
否则切换到普通Hibernate。但目前还没有任何东西需要专门的hibernate访问。目前它只会使事情复杂化。
sessionFactory.getCurrentSession()
getSessionFactory()
@Autowired
private EntityManagerFactory factory;
public EntityManager getEntityManager() {
    return factory.createEntityManager();
}
@Transactional
public void insert(E object) {
    getEntityManager().persist(object);
}