2014-07-21 2 views
0

JPA와 함께 사용해야하는 두 개의 오래된 데이터베이스 테이블이 있습니다.다른 데이터 유형이있는 JPA @ManyToOne

TOUR      VEHICLE 
-----------------------  --------------------- 
Id NUMBER(10)    VehicleNumber CHAR(3) 
VehicleNumber NUMBER(3)  LicensePlate CHAR(10) 

내 JPA 엔티티에서 TOUR에서 VEHICLE까지 @ManyToOne 관계를 사용하고 싶습니다.

차량 엔티티 :

public class Vehicle { 
    @Id 
    @Column(length=3) 
    private String VehicleNumber; 
... 

투어 엔티티 :

public class Tour { 
    @Id 
    @Column(precision=3) 
    private BigDecimal Id; 

    @ManyToOne(fetch=FetchType.EAGER) 
    @JoinColumn(name="VehicleNumber", referencedColumn="VehicleNumber") 
    private Vehicle vehicle; 
... 

그러나 하나 개의 차량 번호가 translatet이 문자열에이고 다른 하나는 인 BigDecimal에 translatet 때문에 물론이 (작동하지 않습니다 정밀도 = 3).

그래서 내가 그들을 어떻게 할 수 있습니까? 숫자가 아닌 값은 무시해야합니다.

어떤 조언을 주셔서 감사합니다.

+1

'작동하지 않습니다.'라는게 무슨 뜻입니까? –

+0

어떤 JPA 버전을 사용하고 있습니까? –

+0

IBM WebSphere Application Server 8.5와 함께 제공되며 IBM i 7.1에서 IBM DB2/400에 액세스하려고하는 OpenJPA 2.0을 사용하고 있습니다. 테이블 중 일부는 20 세 이상이며 다양한 구형 RPG 프로그램을 만지지 않고도 변경할 수 없습니다. – reindan

답변

0

VehicleNumberTOUR의 테이블은 숫자이고 다른 하나는 CHAR입니다. 먼저 형식을 일치시켜야합니다 (표준을 해킹하지 않는 것이 좋습니다).

@Id의 경우 @Column(precision=3)이 아닌 열 이름을 입력하십시오. 따라서 다음과 같아야합니다.

public class Tour { 
    @Id 
    @Column(name = "Id") 
    private BigDecimal id; 
    ... 
} 

다른 테이블에도 동일하게 적용됩니다. 어쨌든, 기본 키는 Long이 아닌 BigDecimal을 사용하지 않는 것이 좋습니다. 엔티티의 경우 함께 작업해도 괜찮습니다. Long

관련 문제