2011-05-02 7 views
4

JPA에서 교차 데이터베이스 테이블 조인을 수행 할 수 있습니까?JPA에서 교차 데이터베이스 조인

별도의 데이터베이스에 organizations 테이블에 대한 외래 키가있는테이블이 하나의 데이터베이스에 있습니다. 두 데이터베이스가 동일한 실제 컴퓨터에 있습니다. 이제 MySQL을 사용하면 여러 데이터베이스에 걸쳐있는 쿼리를 작성할 수 있지만 JPA로이 작업을 수행하는 방법을 잘 모르겠습니다.

Java POJO의 주석은 데이터베이스 이름을 사용하지 않으므로 교차 DB 관계를 표시 할 수 없습니다.

이 상황에 대한 해결책이 있습니까? 아마도 기본 쿼리를 사용하여 조인 된 엔터티를로드 할 수 있습니까?

답변

2

.

1) @Table 주석

2)가 존재하는 스키마에 의해 곤봉 기관에 대해 서로 다른 ORM 파일을 만들 수 없음 스키마 속성.

3) 각 orm 파일에서 "my_schema"를 추가 할 수 있습니다.

4)는 persistence.xml을

5에 각각의 PU의 ORM 파일 포함) 그리고 당신이 시험 중에 다른 데이터베이스를 원하는 경우, 테스트를 위해 유사한 ORM 파일을 작성하고 이에 따라 스키마의 값을 변경 포함 이 orm 파일은 별도의 PU에 있습니다

HTH

3

수 없습니다. 각 엔티티는 지속성 컨텍스트에 바인딩되고 컨텍스트는 데이터베이스에 바인딩되므로 데이터베이스가 같은 서버에서 스키마를 의미하는 경우

당신은 2 일

  • 다른 스키마에 테이블을 가리키는 스키마 중 하나에 뷰를 생성 할 수 있습니다. 단점은 엔터티를 두 번 매핑해야 할 수도 있다는 것입니다 (각 스키마마다 한 번)
  • 조인으로 뷰를 만들고 거기에서 필요한 값을 매핑합니다. 단점은 개체가 읽기 전용이라는 것입니다.

두 스키마가 서로 다른 데이터베이스에있는 경우 코드에서 수동으로 조인을 수행해야합니다.

당신을위한 하나의 질문입니다. 언급 한 "외래 키"는 실제 DB 외래 키입니까 아니면 논리 FK입니까?

+0

논리적 FK입니다. 그리고 데이터베이스는 동일한 물리적 인 머신 상에서도 별개의 MySQL 데이터베이스입니다. –

+0

위와 같은 이유 때문에 가입을 수행 할 수 없습니다.다른 애플리케이션이나 서비스에서 관리되는 DB에서 읽으려는 경우 (SOA와 관련된 작업을 수행하는 경우)이 방법이 유용 할 수 있습니다. 해결책은 코드에서 조인을하는 것입니다. – Augusto

+0

나는 첫 번째 접근법을 취했고 효과가 있었다. 또한 뷰에 대한 조인 쿼리의 성능을 별도의 데이터베이스 테이블에서 테스트 한 결과 거의 동일하게 나타났습니다. –

4

MySQL이 데이터베이스 전체에서 쿼리를 작성하도록 허용 한 경우이 SQL을 JPA의 원시 쿼리에서 사용할 수 있습니다.

나는 어떤 종류의 데이터베이스 연결 메커니즘을 사용하고 있다고 가정합니까? 그렇다면 이것을 매핑 할 수 있어야합니다. 링크 된 데이터베이스의 @Table에 "스키마"를 링크 이름으로 설정할 수 있습니다.

우리는 다음과 같은 방법을 시도하고 작동하는 것 같다
@Table(name="organizations", schema="[email protected]_db") 
+0

+1 와우, 나는 그것을 몰랐다. 이전 프로젝트에서 내 인생을 편하게 만들었을 것입니다. 감사합니다 제임스! – Augusto

관련 문제