매우 간단한 persistance.xml 파일이 있습니다.
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="eventractor" transaction-type="RESOURCE_LOCAL">
<class>pl.michalmech.eventractor.domain.User</class>
<class>pl.michalmech.eventractor.domain.Address</class>
<class>pl.michalmech.eventractor.domain.City</class>
<class>pl.michalmech.eventractor.domain.Country</class>
<properties>
<property name="hibernate.hbm2ddl.auto" value="validate" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
그리고 그것은 작동합니다.
그러나 <class>
요소를 제거하면 응용 프로그램에 엔티티가 표시되지 않습니다 (모든 클래스에으로 주석 처리됨 @Entity
).
@Entity
클래스 를 스캔하는 자동 메커니즘이 있습니까?
답변
persistence.xml에는 jar-file
사용할 수있는가 있습니다. 에서 자바 EE 5 튜토리얼 :
<persistence> <persistence-unit name="OrderManagement"> <description>This unit manages orders and customers. It does not rely on any vendor-specific features and can therefore be deployed to any persistence provider. </description> <jta-data-source>jdbc/MyOrderDB</jta-data-source> <jar-file>MyOrderApp.jar</jar-file> <class>com.widgets.Order</class> <class>com.widgets.Customer</class> </persistence-unit> </persistence>
이 파일은 OrderManagement
JTA 인식 데이터 소스를 사용하는 라는 지속성 단위를 정의합니다 jdbc/MyOrderDB
. jar-file
및 class
엔티티 클래스 임베드 클래스 및 매핑 수퍼 : 요소 영속성 관리 클래스를 지정한다. jar-file
그동안 클래스 영속성 관리 포함하는 패키지 퍼시스턴스 유닛에게 표시 소자 지정 JAR 파일 class
소자 명시 클래스 이름은 영속성 관리.
Hibernate의 경우 Chapter2를 살펴보십시오 . 자세한 내용은 설정 및 구성 도 참조하십시오.
편집 : 실제로 사양을 준수하지 않아도 괜찮다면 Hibernate는 Java SE에서도 자동 감지를 지원합니다. 이렇게하려면 hibernate.archive.autodetection
속성을 추가합니다 .
<persistence-unit name="eventractor" transaction-type="RESOURCE_LOCAL">
<!-- This is required to be spec compliant, Hibernate however supports
auto-detection even in JSE.
<class>pl.michalmech.eventractor.domain.User</class>
<class>pl.michalmech.eventractor.domain.Address</class>
<class>pl.michalmech.eventractor.domain.City</class>
<class>pl.michalmech.eventractor.domain.Country</class>
-->
<properties>
<!-- Scan for annotated classes and Hibernate mapping XML files -->
<property name="hibernate.archive.autodetection" value="class, hbm"/>
<property name="hibernate.hbm2ddl.auto" value="validate" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
답변
에서 자바 SE 환경, 사양에 의해 모든 클래스를 지정해야 당신이했던 것처럼 :
이식성을 보장하려면 모든 명명 된 관리 지속성 클래스 목록을 Java SE 환경에 지정해야합니다.
과
지속성 단위의 루트에 포함 된 어노테이션이있는 지속성 클래스가 지속성 단위에 포함되도록 의도되지 않은 경우 exclude-unlisted-classes 요소를 사용해야합니다. exclude-unlisted-classes 요소는 Java SE 환경에서 사용하기위한 것이 아닙니다.
(JSR-000220 6.2.1.6)
에서 자바 EE 환경, 당신은하지 않습니다 당신을위한 주석 공급자 스캔으로이 작업을 수행 할 수 있습니다.
비공식적으로 <exclude-unlisted-classes>false</exclude-unlisted-classes>
persistence.xml에서 설정 을 시도 할 수 있습니다 . 이 매개 변수의 기본값 false
은 EE 및 true
SE입니다. EclipseLink 와 Toplink 모두 내가 말할 수있는 한 이것을 지원합니다. 그러나 위에서 언급했듯이 사양에 따라 SE에서 작동하는 것에 의존해서는 안됩니다.
다음을 시도해 볼 수 있습니다 (SE 환경에서 작동하거나 작동하지 않을 수 있음).
<persistence-unit name="eventractor" transaction-type="RESOURCE_LOCAL">
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.hbm2ddl.auto" value="validate" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
답변
persistence.xml에 Class 요소가 필요합니까?
아니요, 반드시 그런 것은 아닙니다. 다음은 Eclipse에서 수행하는 방법입니다 (Kepler 테스트 됨).
프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 클릭 한 다음 JPA를 선택 하고 지속성 클래스 관리 틱에서 자동으로 어노테이션이있는 클래스 발견을 선택하십시오 .
답변
Spring에서 JPA를 실행하는 경우 3.1 버전부터 packagesToScan
속성을 설정 LocalContainerEntityManagerFactoryBean
하고 persistence.xml을 모두 제거 할 수 있습니다 .
답변
jar-file
컴파일 된 클래스가있는 폴더에 대한 요소 경로를 제공 할 수 있습니다 . 예를 들어 몇 가지 통합 테스트에 persistence.xml을 준비 할 때 다음과 같은 내용을 추가했습니다.
<jar-file>file:../target/classes</jar-file>
답변
JPA 2+의 경우 이것은 트릭을 수행합니다.
<jar-file></jar-file>
주석이 달린 @Entity 클래스에 대해 전쟁의 모든 항아리를 스캔하십시오.
답변
Hibernate는 <exclude-unlisted-classes>false</exclude-unlisted-classes>
SE에서 지원하지 않습니다 (다른 포스터가 TopLink 및 EclipseLink에서 작동한다고 언급했습니다).
IntelliJ의 Import Database Schema 마법사와 같이 persistence.xml에 클래스 목록을 자동 생성하는 도구가 있습니다. persistence.xml에 프로젝트의 초기 클래스가 있으면 프로젝트가 진행됨에 따라 단일 클래스를 직접 추가 / 제거하는 것이 간단해야합니다.