gpt4 book ai didi

spring - 从 Spring Boot 应用程序访问 SessionFactory

转载 作者:IT老高 更新时间:2023-10-28 13:46:19 25 4
gpt4 key购买 nike

我正在尝试访问 Hibernate session 工厂,但在提到的行出现以下错误。

No CurrentSessionContext configured!

代码

@Service
@Transactional
public class GenericSearchImpl implements GenericSearch {

@Autowired
private EntityManagerFactory entityManagerFactory;

@Override
@SuppressWarnings("unchecked")
public <T> List<T> search(final Class<T> type, final String[] criteriaList, final int page, final int perPage) {
Session session = getSession();
...
}

public Session getSession() {
final HibernateEntityManagerFactory emFactory = (HibernateEntityManagerFactory) entityManagerFactory;
final SessionFactory sessionFactory = emFactory.getSessionFactory();
return sessionFactory.getCurrentSession(); //ERROR No CurrentSessionContext configured!

//This worked but I understand it to be BAD as spring should be managing open sessions.
// try {
// return sessionFactory.getCurrentSession();
// } catch (Exception e) {
// return sessionFactory.openSession();
// }
}

...

}

知道为什么吗?

最佳答案

在属性文件中,

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

在配置类中

@Bean
public HibernateJpaSessionFactoryBean sessionFactory() {
return new HibernateJpaSessionFactoryBean();
}

然后你就可以自动接线了

@Autowired
private SessionFactory sessionFactory;

我们这样做是因为 Spring boot 不会自动配置 hibernate sessinoFactory。

更新:Spring 4.3.12 和 Hibernate 5.2 开始,above Hibernate API solution is depreciated支持通用 JPA API 解决方案 EntityManagerFactory。

Session session = entityManager.unwrap(Session.class);

Here是一些详细的示例文档,其中包含有关 EntityManagerFactory 的示例。

关于spring - 从 Spring Boot 应用程序访问 SessionFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29226099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com