为了账号安全,请及时绑定邮箱和手机立即绑定

Spring Boot-休眠会话工厂的句柄

/ 猿问

Spring Boot-休眠会话工厂的句柄

宝慕林4294392 2019-11-13 15:42:44

有谁知道如何获取由Spring Boot创建的Hibernate SessionFactory的句柄?



查看完整描述

3 回答

?
叮当猫咪

您可以使用以下方法完成此操作:


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


其中,entityManagerFactory是一个JPA EntityManagerFactory。


package net.andreaskluth.hibernatesample;


import javax.persistence.EntityManager;

import javax.persistence.EntityManagerFactory;


import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Component;


@Component

public class SomeService {


  private SessionFactory hibernateFactory;


  @Autowired

  public SomeService(EntityManagerFactory factory) {

    if(factory.unwrap(SessionFactory.class) == null){

      throw new NullPointerException("factory is not a hibernate factory");

    }

    this.hibernateFactory = factory.unwrap(SessionFactory.class);

  }


}



查看完整回答
反对 回复 2019-11-13
?
陪伴而非守候

自动连接Hibernate SessionFactory的最简单,最不冗长的方法是:


这是带有Hibernate 4的Spring Boot 1.x的解决方案:


application.properties:


spring.jpa.properties.hibernate.current_session_context_class=

org.springframework.orm.hibernate4.SpringSessionContext

配置类:


@Bean

public HibernateJpaSessionFactoryBean sessionFactory() {

    return new HibernateJpaSessionFactoryBean();

}

然后,您可以SessionFactory像往常一样在服务中自动连线:


@Autowired

private SessionFactory sessionFactory;

从带有Hibernate 5的Spring Boot 1.5开始,现在是首选方法:


application.properties:


spring.jpa.properties.hibernate.current_session_context_class=

org.springframework.orm.hibernate5.SpringSessionContext

配置类:


@EnableAutoConfiguration

...

...

@Bean

public HibernateJpaSessionFactoryBean sessionFactory(EntityManagerFactory emf) {

    HibernateJpaSessionFactoryBean fact = new HibernateJpaSessionFactoryBean();

    fact.setEntityManagerFactory(emf);

    return fact;

}


查看完整回答
反对 回复 2019-11-13
?
largeQ

伟大的工作安德里亚斯。我创建了一个Bean版本,以便可以自动装配SessionFactory。


import javax.persistence.EntityManagerFactory;

import org.hibernate.SessionFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Bean;


....


@Autowired

private EntityManagerFactory entityManagerFactory;


@Bean

public SessionFactory getSessionFactory() {

    if (entityManagerFactory.unwrap(SessionFactory.class) == null) {

        throw new NullPointerException("factory is not a hibernate factory");

    }

    return entityManagerFactory.unwrap(SessionFactory.class);

}


查看完整回答
反对 回复 2019-11-13

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信