하나 이상의 SE 응용 프로그램에서 JPA 주석이있는 엔티티와 jar를 재사용 할 수 있습니까? < persistence.xml의 jar-> 파일은 SE 환경에서 지원되지 않으므로 다른 방법이 있습니까?SE 환경의 persistence.xml에서 JPA 엔티티 jar를 분리합니다.
답변
공식적으로 (사양에 따라), 당신은 class
요소을 사용하여 모든 클래스를 지정해야합니다. 장 6.2.1.6 매핑 파일, 항아리 파일, 클래스를 인용, 제외-목록에없는-클래스에게 JSR-220의 : 이름 관리 지속성 클래스의 목록도 대신 지정 될 수있다
, 또는 추가 to, JAR 파일 및 매핑 파일. 이러한 클래스에서 발견 된 모든 매핑 메타 데이터 주석이 처리되거나 매핑 주석 기본값을 사용하여 매핑됩니다.지금, 자바 SE의class
요소는 관리되는 지속성 클래스를 나열하는 데 사용됩니다. 이식성을 보장하기 위해 모든 명명 된 관리 지속성 클래스의 목록을 Java SE 환경에 지정해야합니다.. 이식 가능한 Java SE 어플리케이션은, 영속 유닛의 관리 지속 클래스를 지정하기 위해서, 여기에 설명 된 다른기구에 의존해서는 안됩니다. 지속성 공급자는 관리 할 엔티티 클래스 및 클래스 집합을 Java SE 환경의 각 파일persistence.xml
에 완전히 열거해야한다고 요구할 수도 있습니다. 당신은 이식 할 수 없습니다되는 괜찮다면
jar-file
요소를 사용하여
supports 최대 절전 모드 (이 경우 절대 URL이 편리하지 필요하다). Hibernate는 실제로 JSE에서도 자동 감지를 지원한다. 훨씬 좋음 :
<persistence 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"
version="1.0">
<persistence-unit name="foo">
<!-- This is required to be spec compliant, Hibernate however supports auto-detection even in JSE. -->
<class>foo.Bar<class>
<properties>
<!-- Scan for annotated classes and Hibernate mapping XML files -->
<property name="hibernate.archive.autodetection" value="class, hbm"/>
...
</properties>
</persistence-unit>
</persistence>
필자가 아는 한, 주석을 검색하는 클래스가 해당 구성에서 작동하도록하는 방법은 없습니다. 그러나 각 엔티티 클래스에서 persistence.xml 파일을 명시 적으로 지정할 수 있습니다.
<persistence 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"
version="1.0">
<persistence-unit name="punit">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/myDS</jta-data-source>
<!-- Must be explicit as classes are in separate jar -->
<class>com.foo.Bar</class>
<class>com.foo.Baz</class>
<properties/>
</persistence-unit>
</persistence>
이것은 내가 겪었던 문제였습니다. 전쟁 전개의 일부뿐만 아니라 여러 독립 실행 형 독립 실행 형을 실행해야하므로 약간 더 우선합니다.
여러 개의 persistence.xml 파일 및 스프링 리소스 로더 (jour file)를 사용하여 jar 파일을 참조하려고 시도 할 때 이상한 모양의 시도를하는 경우가 있습니다. .
개인적인 해킹은 모든 엔티티 jar에있는 리소스를 해결하고 URL jar 참조를 파싱하고 스프링 지속성 관리자를 사용하여 가상 엔티티의 jar-file 태그에 삽입합니다. persistence.xml
기술적 인 측면에서 볼 때 여러 가지 persistence.xml을 사용하지 않으려 고합니다.
public class SpringPersistenceUnitManager extends DefaultPersistenceUnitManager implements ApplicationContextAware {
private final Logger log = LoggerFactory.getLogger(getClass());
private ApplicationContext ctx = null;
private String jarLocationPattern;
@Override
protected void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui) {
super.postProcessPersistenceUnitInfo(pui);
try {
Resource[] resources = ctx.getResources("classpath*:applicationContext.xml");
for (Resource res : resources) {
String resJar = resolveJar(res.getURL());
if (!resJar.equals(pui.getPersistenceUnitRootUrl().toString())) {
log.info("Adding " + resJar + " to persistence context");
pui.addJarFileUrl(new URL(resJar));
}
}
}
catch (IOException e) {
log.error("error", e);
}
}
private String resolveJar(URL fileInJar) {
String path = fileInJar.getPath();
return path.substring(0, path.indexOf('!'));
}
및 스프링 컨텍스트 물건 :
<util:properties id="hibernate.properties" location="classpath:hibernate.properties" />
<bean id="persistenceUnitManager" class="com.rokksoft.blackice.util.SpringPersistenceUnitManager"
p:defaultDataSource-ref="jdbcDataSourcePool"
/>
<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" lazy-init="true"
p:persistenceUnitManager-ref="persistenceUnitManager"
p:persistenceUnitName="blackicePU"
p:dataSource-ref="jdbcDataSourcePool"
p:jpaProperties-ref="hibernate.properties">
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
</property>
</bean>
당신이 이상적으로 생각 항아리 이름을 필터링 할 - 제 3 자 항아리에서 아무것도있을 수 있습니다.
제 경험으로는 이제 작동합니다.
우리가 사용하는 : 인 hibernate3.jar 3.6.0.Final 최대 절전 모드에서 JPA-2.0-API-1.0.0.Final.jar
< 항아리 파일> 파일을 ... </jar-file>은 상대 경로를 찾는 방법을 알고 있으며 jar 파일이나 디렉토리에서 작동합니다.
나는 두 번이 기능을 사용하고 있습니다 :
- 을 항아리 내 기관 채 - 여러 응용 프로그램에 사용됩니다. 각 앱마다 고유 한 persistence.xml이 있습니다. 주로 다른 ehcache 설정을 제공합니다.
- 모든 테스트를 원할 때 다른 모든 종속 프로젝트에서 엔티티 프로젝트의 모든 엔티티를 가리키는 단일 persistence.xml 파일을 갖기를 원할 때. 그런 다음 해당 프로젝트의 Bin 디렉토리를 가리키는 엔티티 프로젝트의 resources/META-INF에 persistence.xml을 보관합니다. < jar-file> : 엔티티/bin </jar- 파일>
- 1. persistence.xml에서 JPA 데이터베이스 인스턴스를 "매개 변수화"하는 방법은 무엇입니까?
- 2. JPA 엔티티 매핑 확장
- 3. JPA 공유 엔티티 매핑
- 4. JPA 엔티티 유지 보수
- 5. 분리 JPA 엔티티 비틀기
- 6. JPA - 엔티티 디자인 문제
- 7. JPA/Hibernate는 엔티티
- 8. JPA 엔티티 - org.hibernate.TypeMismatchException
- 9. JPA 엔티티 상속
- 10. JPA- 혼합 엔티티 및 비 엔티티 클래스
- 11. JPA 엔티티 클래스 용 SQL 작성을 비활성화하는 방법
- 12. 외래 키가없는 JPA 엔티티 매핑
- 13. jpa/hibernate로 엔티티 업데이트시 문제
- 14. JPA 엔티티 간 데이터 공유
- 15. 스프링 JPA 점진적 엔티티 저장
- 16. JPA persistence.xml
- 17. viewcontroller 제목에서 tabbaritems를 분리합니다.
- 18. 코드에서 SQL 문자열을 분리합니다.
- 19. 런타임시 데이터베이스 스키마에서 JPA 엔티티 클래스를 생성 할 수 있습니까?
- 20. 엔티티 (JPA)에 문자열 배열을 포함하는 방법
- 21. JPA 엔티티 관계가 .persist 후 채워지지 않습니다()
- 22. JPA 1.0 엔티티 클래스 매핑 개선
- 23. JPA 엔티티 다른 엔티티를 지속 중임
- 24. JPA 엔티티 생성 - 개체 대 "프리미티브"
- 25. Spring MVC + JPA - 관련 엔티티 바인딩/업데이트
- 26. Hibernate/JPA : 다른 데이터베이스에 엔티티 매핑
- 27. JPA 매핑 : 다중 관계에서 엔티티 재사용
- 28. Hibernate JPA 일대일 저장 하위 클래스 엔티티
- 29. JPA/JDO 엔티티 - XML XSD 생성기
- 30. 스프링 DB2 JPA 엔티티 관리자 문제