2009-07-28 4 views
2

엔티티 bean을 실제로 사용하지는 않지만 지금 당장 나를 응시하고 있습니다.외래 키가없는 JPA 엔티티 매핑

두 테이블이 서로 관련되어 있지만 외래 키는 없으므로 아무 것도 추가 할 수 없습니다. 이 질문에 대해 데이터베이스는 변경할 수 없으며 단지 불가능합니다. 그러나 다른 솔루션으로 뷰를 만들 수 있습니다. 어쨌든 ...

나는 3 개의 테이블을 가지고 있습니다. LOCATION, LINKS 및 ENDPOINT가 있으며 추가 소금은 LINKS_TYPE 테이블입니다.

LOCATION 테이블에는 위치 ID가 포함 된 문자열 인 기본 키 LOCATIONID가 있습니다.

LINKS 테이블 기본 키 LOCATION의 기본 키를 포함 ENDPOINT의 기본 키 열 LINK_ATTR_VALUE_B 포함 열로서 linkID를 LINK_ATTR_VALUE_A있다. 키 차 LINKS_TYPE

엔드 포인트 테이블을 포함 열 LINKTYPEID는

LINKS_TYPE가 기본 키 LINKTYPEID 열 LINKTYPEA (테이블 이름을 정의하는 텍스트 문자열이 연결된 것)했다 기본 키 POINTID 열 LINKTYPEB을 (이 링크 된 테이블 이름을 정의하는 텍스트 문자열)

LINKS_TYPE이 언급되었지만 데이터베이스의이 인스턴스에는 다른 링크가 없기 때문에 걱정할 필요가 없습니다.

내 LOCATION 엔터티 'List endPoints'에 멤버를 정의하고 싶습니다. 내 이해에서 @OneToMany가 될 것입니다. 여기에 도움이되는 외래 키가 없으며 항상 존재하지 않을 것임을 명심하십시오.

이것은 내가 정의 매핑 ... 그것은이 매우 높습니다

@OneToMany (cascade=CascadeType.ALL) 
@JoinTable (name = "ENDPOINT", 
      joinColumns = @JoinColumn ( 
           name = "LINK_ATTR_VALUE_B" 
          ), 
      inverseJoinColumns = 
          @JoinColumn ( 
           name = "LINK_ATTR_VALUE_A" 
      ) 
      ) 
private List<EndPoint> endPoints; 

당신은 내가 더 내가 뭘하는지 실마리가 없다 깨달을 수있다 : 문서의 아닌가요 너무 D 그러나, 그리고 필자 주문 ejb 3에 대한 책, 그러나이 맵핑을하기 전에 책을 마칠 시간이 없다 : D

우리는 jdeveloper 11g에서 TopLink를 사용하고 weblogic 서버에서는 오라클 10g를 데이터베이스로 사용하고있다.

query를하기 위해 serviceFacade 클라이언트를 사용할 때, 모든 것이 올바르게 보였습니다. (작업 공간이 없어졌고 클라이언트를 작동시키기 위해 프로젝트를 다시 만들어야하기 때문에). 제 생각에 올바른 데이터를 검색하기 위해 완벽한 쿼리를 생성합니다. 그러나 결과는 없습니다.

가능한 한 많은 정보를 제공 할 의향이 있습니다. 무엇이 필요한지 확실하지 않습니다. 하지만 매핑이 잘못되었다는 것을 알고 있습니다. 매핑을 이해할 수 없기 때문입니다.

누군가 나를 도울 수 있습니까?

감사합니다.

답변

2

귀하의 링크 표는 다 대다 매핑 테이블 LOCATION 사이 ENDPOINT보다는 일대 것 같습니다.큰 질문은 여기에 나열된 LINKID, LINK_ATTR_VALUE_ALINK_ATTR_VALUE_B을 제외한 추가 열이 있는지 여부입니다.
Location이 일대
Link는 대일 관계를했을 양방향으로 매핑 Links의 컬렉션을 것이다 : 만약 그렇다면

, 당신은 별도의 엔티티로 매핑 할 것 모두 LocationEndPoint

OTOH, 만약, 링크와 다른 열 당신이 (필요하지 않습니다 어느 쪽도 아니다 대다 테이블을 조인 매핑 할 수 있습니다) 기본 키를 지내다 기꺼이이 없습니다 그런 다음이를 many-to-many collectio로 매핑 할 수있다. n은 EndPoints이고 Location입니다.

질문을 명확히 할 수 있으면 필요한 경우 실제 매핑을 포함하도록 답변을 업데이트하겠습니다.

+0

감사합니다. 나는 당신의 제안 중 일부를 시도 할 것입니다. 만약 내가 여전히 붙어 있다면, 멋진 다이어그램과 모든 jaz를 그리고 여기에 게시 할 것입니다. D 고맙습니다. – guyumu

+0

괜찮습니다. 우리는 전체 데이터 모델을 완벽하게 매핑하는 데 항상 성공적이었습니다. 내가 어떻게했는지 업데이트 할 예정입니다. 이제 관리자 만 할 수 있습니다. 내가 사용할 수있는 올바른 옵션과 내가 이해해야하는 개념을 설명했기 때문에 귀하의 게시물을 답변으로 선택합니다. 고마워. – guyumu

0

여기에 내가 끝낸 매핑이 있습니다.

@OneToMany(cascade=CascadeType.ALL) 
@JoinTable(name = "LINK", 
    joinColumns = { 
      @JoinColumn(name="LINK_ATTR_VALUE_B") 
     }, 
      inverseJoinColumns = { 
      @JoinColumn(name="LINK_ATTR_VALUE_A") 
      } 
) 
private List<EndPoint> endPoints; 

은 진정으로 LINK 테이블에 지금 필요한 값이 밤은. 하지만 이제는 DBA가 우리 나 다른 무언가를위한 구체화 된 뷰를 만들어야합니다. 매핑을 attemting 때

는하지만, 나는 initialy 오히려 엔드 포인트로 바로가는보다는 LINK을 유지했다. 나는 거기에 오직 133을 가져야 만하는 5000+ 링크를 돌려 주었다. 다시 한번 나는 이해하지 못하는 매핑이있다. 그러나 나는 나중에 그것을 떠날 것이다.

현재 데이터베이스에는 1 개의 링크 유형 만 있습니다. 이것은 변경 될 것이고, 실제로 나는 거기에 추가 절을에 추가하는 방법이 있었기 때문에 다른 유형의 다른 속성 매핑을 가질 수있었습니다.

오늘 타이핑 분위기에 있습니다 .-D

+1

위의 매핑을 ManyToMany로 변경해야합니다. 일단 그렇게하면 LINK_ATTR_VALUE_B에 "where 절"이 암시 적으로 추가됩니다. OneToMany는 주어진 파일이 하나의 폴더에만 속하는 폴더/파일과 같은 것입니다. ManyToMany 예제는 Author/Book입니다. 여기서 책은 여러 저자가 쓸 수 있고 많은 책을 쓸 수 있습니다. ManyToMany 항상 참여 테이블이 필요합니다 (예 : 위치/끝점간에 링크가 있음). OneToMany가 가질 수 있지만 대개는 그렇지 않습니다. – ChssPly76

+0

고맙습니다. 나는 그것을 확실히 시험해 보겠다 : D – guyumu