2011-11-26 3 views
0

최대 절전/JPA의 간단한 연결을 구현 :어떻게이 개 테스트 클래스를

Class A{ 
    B b; 
    // some other properties 
} 

Class B{ 
    // some properties 
} 

(A)의 모든 인스턴스는 클래스 B의 인스턴스를 가지고 있지만, 클래스 B의 인스턴스가보다 더 할당 할 수 있습니다 클래스의 인스턴스

처럼 A :

B b = new B(); 
A a1 = new A(); 

a1.setB(b); 

A a2 = new A(); 
a2.setB(b); 

는이 협회의 어떤 유형입니까?
처음에는 일대일 단방향 일까 생각했지만 어쩌면 다 대일일까요? B에 A 객체가 없습니다.

주석을 사용하여이 연관을 구현하는 올바른 방법은 무엇입니까?

+0

A면에서 많습니다. –

답변

5

(A)의 모든 인스턴스가 클래스 B의 인스턴스를 가지고 (많은)>를하지만 인스턴스 의를 클래스 B는 클래스 A의 둘 이상의 인스턴스에 할당 될 수 있습니다.

따라서 A와 B는 다 대일 관계입니다. B에서 A는 일대 다 관계입니다.

@Entity 
@Table(name="tableA") 
Class A{ 

    @ManyToOne 
    @JoinColumn(name = "B_ID") 
    B b; 

    // some other properties 

} 

@Entity 
@Table(name="tableB") 
Class B{ 

    @OneToMany(mappedBy = "b") 
    List Set<A> listOfA= new ArrayList<A>(); 

    // some other properties 
} 

중요 사항 :

  • @Entity가 절전 엔티티로서 자바 클래스 마크

    다음은 A와 B를 사용 주석 간의 양방향 매핑을 나타낸다. 그것은 기본적으로는 기업의 규정되지 않은 클래스 이름과 동일 이름으로 테이블에 매핑되는, 지정된 아니 @Table 만약 @Table

  • 에 지정된 테이블의 이름에 매핑됩니다.

  • @ManyToOne

    가 클래스 B의 관계 클래스 A 정의는 다 대일 관계는 다음 외래 키 제약 조건을 사용하여 표현된다 일대 관계형 데이터베이스에

  • :

    "많은 부가 테이블"에는 "일면 테이블"의 PK 만 허용하는 FK 열이 있습니다.

    이 FK 열의이 이름은 name 속성이 @JoinColumn 인 것으로 명시 적으로 정의 할 수 있습니다. @JoinColumn이 지정되지 않으면 "한 쪽 테이블"의 이름, _ (밑줄) 및 "한 쪽 테이블"의 PK 이름과 연결되는이 FK 열에 사용될 기본값이 사용됩니다 .

  • @OneToMany은 클래스 B와 클래스 A의 관계를 일대 다로 정의합니다.

+0

내가 얻지 못하는 것은 : B 클래스에 listOfA가 필요합니까? 내 예제에서는 존재하지 않는, 나는 그것을 B 클래스에 추가해야하거나 그냥 B에 @ManyToOne 및 B에 A 컬렉션 없음 B에 주석을 달 수 있습니까? – res1

+1

나는 A와 B 사이의 * 양방향 * 매핑을 데모합니다. 이것은 A가 주어지면 B에 액세스 할 수 있음을 의미합니다. 그리고 B가 주어진다면 A.에 접근 할 수 있습니다. B에서'@ OneToMany'를 생략하면 그들의 관계는 * 단방향 *으로 매핑됩니다. 물론, 그것도 작동합니다! 하지만 B가 주어지면 A에 액세스 할 수 없습니다. –

1

의 관계는 다음과 같습니다에

B (한) --- -