【发布时间】:2015-12-08 18:23:48
【问题描述】:
我正在将遗留应用程序迁移到 Spring-boot,并且必须集成一个名为查询映射的休眠文件(之前在 persitence.xml 文件中配置)。
我想出了一个解决方案
...
@Autowired
private DataSource dataSource;
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
//...
sessionFactoryBean.setMappingResources("META-INF/named-queries.hbm.xml");
return sessionFactoryBean;
}
但我的应用程序中将有一个 entityManager bean 和一个 sessionFactory bean!
您认为这是一个好的解决方案吗? 有没有办法在不使用 sessionFactory bean 的情况下以某种方式将休眠映射文件 (named-query.hbm.xml) 添加到 entityManager?
提前感谢您的建议
** 编辑 ** 根据 JB Nizet 的建议,也想出另一个解决方案
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean();
entityManagerFactory.setDataSource(dataSource);
// ...
entityManagerFactory.setMappingResources("META-INF/named-queries.hbm.xml");
return entityManagerFactory;
}
在我的 DAO/Service 中,我仍然可以通过以下方式获得休眠会话:
private Session getSession() {
//return this.sessionFactory.getCurrentSession();
return this.entityManager.unwrap(Session.class);
}
但是,如果有人现在知道我们是否可以使用带有属性的 spring-boot 自动配置来做同样的事情,那么欢迎!
【问题讨论】:
-
您可以使用实体 java 文件上的注释来放置命名查询。
-
为什么不在LocalContainerEntityManagerFactoryBean上设置映射资源呢? docs.spring.io/spring/docs/current/javadoc-api/org/…
-
@Jay 感谢您回复 Jay。如前所述,我使用的是旧代码,我必须按原样集成映射文件。
-
@JBNizet 感谢您的建议 JB。是否可以使用 spring-boot 属性(和自动配置机制)设置映射资源,还是我必须自己定义 LocalContainerEntityManagerFactoryBean?
-
在
persistence.xml. 中定义您的mapping-file,并放弃自定义配置的。或者将您的named-queries.hbm.xml迁移到orm.xml(此文件的 JPA 等效项)并将其放在META-INF中,它将自动加载。
标签: java hibernate jpa spring-boot