2012-03-26 4 views
13

말을 한 이유는포함 가능한 개체 내가 엔티티를 다음 한

@Entity 
public class A { 
    @Id 
    @GeneratedValue 
    private Long id; 

    @Embedded 
    private B b; 

    //getters and setters 
} 

@Embeddable 
public class B { 
    @OneToMany 
    private List<C> cList; 
    //getters and setters 
} 

@Entity 
public class C { 
    @Id 
    @GeneratedValue 
    private Long id; 
    //other fields, getters and setters 
} 

내가 AC 사이의 매핑을 포함하는 추가 테이블을 얻을 수 Hibernate와 스키마 자동 생성 기능을 사용. 그러나 AidC (예 : 추가 테이블없이)에 추가하여 일대 다 관계를 구현하고 싶습니다.

이것이 가능합니까? 그렇다면 이러한 매핑을 만들 때 어떤 주석을 사용해야합니까?

답변

7

일반적으로 @JoinColumn 주석으로 가능합니다. 그것은 또한 embeddables와 함께 작동합니다.

@AssociationOverride(name= "cList", 
     joinColumns = @JoinColumn(name="SOME_NAME_FOR_JOIN_COLUMN_IN_TABLE_C")) 
@Embedded 
private B b; 
+0

을하지만 어떻게 A_ID'이의 식별자입니다 '것을, 지정합니까 : 당신이 임베드에 주어진 열의 A_ID 이름이 마음에 들지 않으면

@OneToMany @JoinColumn(name="A_ID") private List<C> cList; 

, 당신은 엔티티 (A)에 열 이름을 대체 할 수 있습니다 엔티티 'A'? – jFrenetic

+0

당신은 그것을 지정할 필요가 없다. B에 주어진 매핑은 A의 컨텍스트에서 평가되고, 그래서 당신의 영속성 제공자는 이것을 알고있다. 또는 조인 열 이름을 재정의하는 방법을 의미 할 수도 있습니다. 예를 들어 답을 추가했습니다. –

+0

고마워요! 그것은 나를 위해 일했다. 나는 persistence provider에게 id를 가져 오는 엔티티를 명시 적으로 알려줄 필요가 있다고 생각했지만, 조금 더 똑똑하다고 밝혀졌다. :) – jFrenetic