지속적 특성을 JPA용 XML 열에 맵핑

데이터베이스가 XML(Extensible Markup Language) 열 유형을 지원하는 경우 맵핑 도구를 사용하여 XML 오브젝트를 관리할 수 있습니다. XML 열을 Java™ 문자열 또는 Java 바이트 배열 필드에 매핑하도록 선택할 수 있습니다.

이 태스크 정보

주목: 영구 속성을 XML 열에 매핑하는 지원은 더 이상 WebSphere® Application Server JPA 확장용. Apache OpenJPA 문서에서 XML 맵핑에 관한 정보를 찾을 수 있습니다.

애플리케이션 서버용 JPA는 맵핑 관리를 위한 써드파티 솔루션을 사용함으로써 XML 오브젝트의 관리를 지원합니다. 이러한 맵핑 기법에서는 XML 오브젝트를 문자열 또는 바이트 배열로 사용하기가 어렵습니다.

DB2®, Oracle, SQLServer 데이터베이스는 XML 열 유형, XPath 쿼리 및 이러한 열에 대한 인덱스를 지원합니다.

XML 맵핑에 대한 지속적 특성

XML 열 지원을 사용하는 임베디드 클래스는 XML 마샬링을 사용하여 XML 열에 데이터를 기록하고 마샬링 해제를 사용하여 XML 열에서 데이터를 검색해야 합니다. 임베디드 클래스에 대한 경로 표현식과 술어는 XML 술어, XPATH 표현식 또는 XQuery 표현식으로 변환되어 데이터베이스에 기록되어야 합니다.

WebSphere Application Server XML 매핑을 위한 타사 도구를 사용하기 위해 JPA 애플리케이션을 지원합니다. 이는 사용자 정의 필드 맵핑의 확장점을 통해 수행됩니다. 써드파티 맵핑 도구는 XML 열로 맵핑되는 지속적 필드에 사용자 정의 값 핸들러를 제공하여 확장점을 사용합니다. ~ 안에 OpenJPA, 이 값 핸들러의 이름은 다음과 같습니다. org.apache.openjpa.xmlmapping.XmlValueHandler 이 핸들러에는 XML 열에 매핑되는 Java 필드에 @Strategy 주석이 필요합니다.

프로시저

  1. XML 값 핸들러 계획을 사용하여 엔티티 특성에 어노테이션을 추가하십시오.
    XML 열에 대한 지속적 특성 맵핑에는 @Strategy와 @Persistent 어노테이션이 필요합니다.
    @Persistent
    @Strategy("org.apache.openjpa.xmlmapping.XmlValueHandler")
    지속적 특성의 XML 값 핸들러는 org.apache.openjpa.xmlmapping.XmlValueHandler로 설정됩니다.
  2. 필요한 경우 페치 유형의 기본값을 변경하십시오.
    예를 들어,
    @Persistence(fetch=FetchType.LAZY)
    
    현재 페치 유형은 LAZY입니다. 페치 유형 값을 입력하지 않는 경우 기본값은 EAGER로 설정됩니다.
  3. 임베디드 클래스에 JAXB(Java API for XML Binding)에 대한 바인딩 어노테이션을 추가합니다.
    이러한 바인딩은 XML 스키마에서 XJC(XML Binding Compiler)용 Java 아키텍처를 사용하여 작성할 수 있습니다.
  4. XML 문서의 루트로 맵핑되는 클래스는 다른 어노테이션뿐만 아니라 @XmlRootElement로 어노테이션됩니다.
  5. Java 소스를 컴파일하십시오.
  6. 엔티티에서 인핸서 도구를 실행하십시오.
    자세한 정보는 엔티티 인핸서 도구에 대한 주제를 참조하십시오.

예를 들면, 주문 엔티티의 특성인 shipAddress는 XML 열 shipaddr로 맵핑됩니다.
@Entity
public class Order {
	@Id 
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	 int oid;
	@Persistent
	@Strategy("org.apache.openjpa.xmlmapping.XmlValueHandler")
      @Column(name="shipaddr")
      Address shipAddress;
…

OpenJPA 맵핑 도구는 ORDER 테이블의 테이블 정의에 있는 XML 유형을 사용하여 SHIPADDR 열을 생성합니다.