2013-04-19 3 views
0

Java Enterprise 및 JPA (Netbeans의 EclipseLink JPA 2.0 사용)에서 새로 도입되었습니다. 다른 프로젝트와 패키지에있는 @Entity 클래스 간의 링크를 성공시키지 않고 실현하려고합니다.@Entity 다른 데이터베이스의 테이블 간의 관계

데이터베이스 D1에는 테이블 T1과 데이터베이스 D2에서 테이블 T2를 참조하는 동의어 T2가 있습니다.

그래서 나는이 개 프로젝트 (항아리)를 만들 :

@Entity package1.T1.class과의 persistence.xml (매핑 또한 T2) @Entity package1.T2를 포함

D2-JPA를 포함 D1-JPA 된 .class 및 I는 T1에서 T2까지 @OneToOne 관계를 만들어야

의 persistence.xml T1이 너무

@OneToOne

공공의 T2 (T2)를 가지고; 나는 간단한 JPQL 쿼리를 실행하려고 할 때

문제는 다음과 같습니다 T1의 t

번역 된 쿼리에서

SELECT t이다

SELECT t.field1, t.field2, T2_t2 같은 FROM T1 t; - "T2_t2"??

내가 예상 한 T1의 T1 FROM SELECT의 t1.field1, t1.field2, t2.field1, T2의 T2

(조건 가입) 문제에 해결책을 무엇

같은 뭔가? D1의 동의어가 D2의 실제 테이블과 다른 이름을 갖는 경우 (D2의 T2를 참조하는 동의어 TT2 ...)?

모두들. 대상이 지속성 부 내의 개체의 경우에 순수한 JPA

F.

+0

"는 EclipseLink의 복합 퍼시스턴스 유닛의 기능을 하나의 설명 다수의 지속성 단위를 소집하고이를 사용하여 수행 할 수 있습니다 매핑 관계는 복합에서 엔티티의 사이에서 설정할 수 있습니다. " 이것은 훌륭해 보이지만 한 DB에서 다른 데이터베이스로 동의어를 사용하는 조인 테이블과 동일합니다 (예 : performace). –

답변

1

@OneToOne 만 작동한다. 예외가 발생하지 않으므로 둘 다 D1 지속성 클래스 로더에서 찾아 처리 할 수있는 것처럼 작동합니다. T2 엔티티에 ID로 표시된 t2 필드 또는 특성이 있기 때문에 매핑에서 T1-> T2 외부 키 필드를 "T2_t2"로 기본값 설정 중일 것입니다. 다른 데이터베이스 열을 외래 키로 사용하려면 관계에 조인 열을 지정해야합니다.

T1은 T2를 가져올 수 있어야하므로 분명히 구분되어 있지 않으므로 완전히 분리되지는 않습니다. 테이블은 동일한 데이터베이스에 있어야하며 그 사이에 1 : 1이 있어야합니다. 하지만 당신은 복합 지속성 단위로 여기 http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Composite_Persistence_Units

+0

맞습니다. 실제로 ManyToOne 관계입니다 (D1은 데이터베이스를 포함하는 사람이고 D2는 의사가 포함 된 사람입니다. 한 사람은 의사가 있고, 의사가 많습니다). 예를 단순화하기 위해 OneToOne로 변경했지만 잘못된 것입니다. 아마도 실제 코드에서 OneToOne 관계는 사용자가 말한 것처럼 작동하지 않습니다. 제공된 링크를 보겠습니다. 감사합니다. 감사합니다. –