如何在Spring启动时自动装配Hibernate SessionFactory

时间:2017-05-10 14:38:18

标签: spring hibernate spring-boot

我已经创建了一个Spring启动应用程序,我想处理Hibernate SessionFactory,所以在我的服务类中,我可以按如下方式调用Hibernate SessionFactory:

@Autowired
private SessionFactory sessionFactory;

我在stackoverflow中发现了一个类似的问题,我必须在application.properties中添加以下行:

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

但我收到此错误:

Cannot resolve property 'current_session_context_class' in java.lang.String

我该如何解决这个问题?

pom.xml依赖项:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

2 个答案:

答案 0 :(得分:12)

从2.0版开始,JPA可以轻松访问底层实现的API。 EntityManagerEntityManagerFactory提供了一个unwrap方法,该方法返回JPA实现的相应类。

在Hibernate的情况下,这些是SessionSessionFactory

SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class);

答案 1 :(得分:4)

尝试在Spring配置中启用Preferences -> Editor -> Code Style

HibernateJpaSessionFactoryBean

看看: https://stackoverflow.com/a/33881946/676731

通过Spring配置,我的意思是使用@Configuration注释或@SpringBootApplication注释的类(使用@Bean public HibernateJpaSessionFactoryBean sessionFactory() { return new HibernateJpaSessionFactoryBean(); } 隐式注释)。