2016-09-05 2 views
1

내 데이터베이스의 열 중 하나는 "3,7,8"과 같은 비정규 화 된 ID 문자열입니다. db의 레거시 로직을 바꿀 수는 없습니다.JPA에서 외래 키로 ID를 연결 한 문자열 열 값 사용

나는 현재 List<Integer>에 필드를 변환하는 @Converter를 사용하고 있지만, 기업이 직접 정의 그래서 나는 두 번째 패스를 할 싶습니다

@Column 
@OneToMany 
List<ForeignEntity> 

에 JPA를 말할 수있는 기본 방법이 있나요 그것을 변환하는 두 번째 패스를 만드시겠습니까?

나는 변환기에서 해결할 수 있지만 데이터 변환기 내부에서 쿼리를 사용하지 않아도되고, 표준 JPA 주석 및 메커니즘의 이점을 얻으려면 더 멋진 방법을 찾고 있습니다. 누군가가 더 나은 솔루션으로 날 지점 수 있다면

사실, 내 외국 기업이지도보다는 다른 아무것도 없다, 그래서 그것을 훨씬 더 복잡 할 수 및

@Column 
@OneToMany 
List<Map<String,String>> resolvedValues; // Contains {Map[A,B,C]{... , ..., ...}, Map[A,B,C]{... , ..., ...}, ... } 
에 직접

id | key | value 
---------------- 
3 | A | ... 
3 | B | ... 
3 | C | ... 
7 | A | ... 
7 | B | ... 
7 | C | ... 
... 

해결

나는 정말 greateful!

답변

0

JPA의 - javax.persistence.AttributeConverter 인터페이스를 사용할 수 있습니다. 그 방법을 재정 의하여

:

여기
@Override 
public String convertToDatabaseColumn(ForeignEntity fe) { 
. 
. 
. 
} 

은 사양입니다 -

https://docs.oracle.com/javaee/7/api/javax/persistence/AttributeConverter.html

+0

감사합니다! 하지만 이미 사용하고 있습니다. 내가 말했듯이, 나는 현재 문자열을 목록 으로 변환 중입니다. 일반적인 JPA 주석을 사용하여이를 참조 된 엔티티로 디코딩하는 방법입니다. 이는 변환기 코드에서 서브 쿼리를 수행하지 못하도록합니다. – Whimusical

관련 문제