2014-02-24 3 views
0

JPA 2.0은 사용자 정의 유형을 지원합니까? OpenJPA를 사용하고 있습니다. 2.0 스펙을 살펴 봤는데 사용자 정의 유형에 대해서는 아무 것도 보지 못했습니다. 나는 약간 놀랐다. 나는 무엇인가 놓쳤 느냐?JPA 2.0은 사용자 정의 유형을 지원합니까?

사용자 정의 유형에 의해, 나는 Hibernate가 허용하는 것과 같은 것을 의미한다. 예를 들어 RED, GREEN 및 BLUE 열에 매핑 된 고객 Color 유형을 정의한 다음 객체에 유지되는 Color 필드를 가질 수 있습니다. 또한 Embedded 객체를 사용하여 수행 할 수도 있지만 사용자 정의 유형을 다른 객체에 사용할 수 있습니다.

내가 (A 위치 엔티티의 일부를 형성)를 LocationCode 유형이, 그이 3 개 숫자 필드로 구성되어 있습니다 :

내가 가진 특별한 문제

이입니다. 내가 주어진 데이터베이스 스키마에서, 이것은 3 개의 필드가 문자열로 함께 첨부 된 1 열로 매핑됩니다. 비즈니스 논리를 깨끗하게 유지하기 위해 응용 프로그램에서이 '매핑'논리를 숨기고 싶었고 이와 같은 저장 논리를 다루는 것보다 더 추상적 인 수준으로 정의했습니다.

내 첫 번째 시도는 내 객체에서 @Transient로 LocationCode를 정의하고 다른 String 필드를 열에 매핑하도록했습니다. @PreUpdate @PrePersist와 @PreLoad에서 문자열 필드를 설정하거나 LocationCode 필드로 구문 분석하여 3 개의 숫자 값과 1 개의 문자열 사이의 변환을 수행합니다.

문제는 EntityManager.merge()에서 발생합니다. @Transient LocationCode 필드가 병합에 의해 복사되지 않기 때문에 Location 엔티티를 데이터베이스에 병합 할 수 없습니다. 그러므로 나는 병합의이 부분을 처리해야하는데, 어떤 종류의 병합 된 병합의 사용을 무효로한다.

LocationCode에 대한 사용자 정의 사용자 정의 유형을 사용하면 관리 필드 인 LocationCode를 가질 수 있지만 여전히 하나의 데이터베이스 열에 3 개의 숫자 값을 매핑 할 수 있다는 것을 알 수 있습니다. 그런 다음 merge()가 작동합니다.

2.0에 없으면 사용자 정의 유형이 JPA의 최신 버전에 추가됩니까? 아니면 OpenJPA 특정 API에서 찾을 수 있습니까?

도움 주셔서 감사합니다.

+0

JPA 2.1을 살펴 봐야합니다. –

+0

네, 거기에 있습니다. OpenJPA 2.2.0에 붙어 있습니다. 현재는 2.0으로 올라갑니다. – user2800708

답변

0

아니요, JPA 2.0은 없지만 JPA 2.1은 그렇지 않습니다.