gre*_*fox 6 java orm spring jpa spring-data-jpa
我想将Jpa的自定义映射外部化为XML文件.我已经看到了使用orm.xml的例子,但是当我在resources/META-INF中创建orm.xml时,似乎没有加载它.我看到的所有示例都是通过persistence.xml加载的,我没有使用Spring Boot.我没有多少寻找答案.如何使Spring Boot加载我的orm.xml文件?
示例orm.xml
<entity-mappings version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence/orm
http://xmlns.jcp.org/xml/ns/persistence/orm_2_1.xsd">
<sql-result-set-mapping name="AuthorMappingXml">
<entity-result entity-class="org.thoughts.on.java.jpa.model.Author">
<field-result name="id" column="authorId"/>
<field-result name="firstName" column="firstName"/>
<field-result name="lastName" column="lastName"/>
<field-result name="version" column="version"/>
</entity-result>
</sql-result-set-mapping>
<sql-result-set-mapping name="AuthorBookCountMappingXml">
<entity-result entity-class="org.thoughts.on.java.jpa.model.Author">
<field-result name="id" column="id"/>
<field-result name="firstName" column="firstName"/>
<field-result name="lastName" column="lastName"/>
<field-result name="version" column="version"/>
</entity-result>
<column-result name="bookCount" class="java.lang.Long" />
</sql-result-set-mapping>
<sql-result-set-mapping name="BookAuthorMappingXml">
<entity-result entity-class="org.thoughts.on.java.jpa.model.Author">
<field-result name="id" column="authorId"/>
<field-result name="firstName" column="firstName"/>
<field-result name="lastName" column="lastName"/>
<field-result name="version" column="authorVersion"/>
</entity-result>
<entity-result entity-class="org.thoughts.on.java.jpa.model.Book">
<field-result name="id" column="id"/>
<field-result name="title" column="title"/>
<field-result name="author" column="author_id"/>
<field-result name="version" column="version"/>
</entity-result>
</sql-result-set-mapping>
<sql-result-set-mapping name="BookValueMappingXml">
<constructor-result target-class="org.thoughts.on.java.jpa.value.BookValue">
<column name="id" class="java.lang.Long"/>
<column name="title"/>
<column name="version" class="java.lang.Long"/>
<column name="authorName"/>
</constructor-result>
</sql-result-set-mapping>
</entity-mappings>
Run Code Online (Sandbox Code Playgroud)
rvi*_*t34 11
是啊.如果orm.xml存在META-INF于结果jar 中的 目录中,则Spring Boot应默认加载它.
否则,可以通过创建自定义手动加载它LocalContainerEntityManagerFactoryBean,如下所示:
Application.properties
spring.jpa.orm=orm.xml
Run Code Online (Sandbox Code Playgroud)
DBConfig.java(如果您使用Hibernate作为持久性提供程序)
@Configuration
public class DBConfig extends HibernateJpaAutoConfiguration {
@Value("${spring.jpa.orm}")
private String orm;
@SuppressWarnings("SpringJavaAutowiringInspection")
public DBConfig(DataSource dataSource, JpaProperties jpaProperties, ObjectProvider<JtaTransactionManager> jtaTransactionManagerProvider) {
super(dataSource, jpaProperties, jtaTransactionManagerProvider);
}
@Override
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder factoryBuilder)
{
final LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = super.entityManagerFactory(factoryBuilder);
entityManagerFactoryBean.setMappingResources(orm);
return entityManagerFactoryBean;
}
}
Run Code Online (Sandbox Code Playgroud)
我发现在实体保持干净的同时将所有映射移动到外部xml文件非常有用.
好吧,误报了,看来 Spring Boot 默认会加载它,但是我的 Intellij / Gradle 设置还有另一个问题,它没有部署最新的构建 / WAR,因此它在没有 orm.xml 的情况下部署。我必须进行 gradle clean,并使 Intellij 中的缓存无效并重新启动。
| 归档时间: |
|
| 查看次数: |
6699 次 |
| 最近记录: |