[SPRING] 봄 부팅로드 orm.xml
SPRING봄 부팅로드 orm.xml
Jpa에 대한 사용자 지정 매핑을 XML 파일로 외부화하려고합니다. orm.xml을 사용하는 예제를 보았지만 resources / META-INF에 orm.xml을 작성할 때로드되지 않는 것으로 나타납니다. 필자가 본 모든 예제는 Spring Boot가없는 persistence.xml을 통해로드됩니다. 나는 대답을 많이 찾지 않았다. Spring 부트가 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>
해결법
-
==============================
1.네. orm.xml이 result jar의 META-INF 디렉토리에 존재하면 스프링 부트가 기본적으로로드해야합니다. 그렇지 않으면 아래와 같이 사용자 정의 LocalContainerEntityManagerFactoryBean을 작성하여 수동으로로드 할 수 있습니다.
네. orm.xml이 result jar의 META-INF 디렉토리에 존재하면 스프링 부트가 기본적으로로드해야합니다. 그렇지 않으면 아래와 같이 사용자 정의 LocalContainerEntityManagerFactoryBean을 작성하여 수동으로로드 할 수 있습니다.
Application.properties
spring.jpa.orm=orm.xml
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; } }
엔티티가 깨끗하게 유지되는 동안 모든 매핑을 외부 XML 파일로 옮기는 것이 매우 유용하다는 것을 발견했습니다.
-
==============================
2.오케이 거짓 경보, 스프링 부트가 기본적으로로드되지만 내 Intellij / Gradle 설치에는 orm.xml없이 배포되도록 최신 빌드 / WAR를 배치하지 않는 또 다른 문제점이 있습니다. 내가 gradle 깨끗하게하고 Intellij에서 캐시를 무효화하고 다시 시작했다.
오케이 거짓 경보, 스프링 부트가 기본적으로로드되지만 내 Intellij / Gradle 설치에는 orm.xml없이 배포되도록 최신 빌드 / WAR를 배치하지 않는 또 다른 문제점이 있습니다. 내가 gradle 깨끗하게하고 Intellij에서 캐시를 무효화하고 다시 시작했다.
from https://stackoverflow.com/questions/32062828/spring-boot-load-orm-xml by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 애플리케이션의 예외 처리 위치 (0) | 2019.04.10 |
---|---|
[SPRING] SessionRegistry로 사용자 로그인하기 (0) | 2019.04.10 |
[SPRING] 스프링 부트 Autowired가 Configuration 클래스에서 작동하지 않습니다. (0) | 2019.04.10 |
[SPRING] 모든 프로 바이더의 후에 Spring Security java.lang.StackOverflowError 예외 (0) | 2019.04.10 |
[SPRING] 사용자 정의 메소드 보안 표현식을 작성하는 가장 좋은 방법 (0) | 2019.04.10 |