2012-03-10 3 views
3

안녕하세요, JPA를 사용하여 @ManyToMany 관계 매핑에 대해 배우고 있습니다. 나는 그것이 어떻게 작동하는지 더 많이 또는 더 잘 이해하지만 의심 스럽다.JPA 매핑에 대한 의문점이 @ManyToMany

@Entity 
public class EntityE implements Serializable { 

    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long eId; 
    @ManyToMany 
    @JoinTable(joinColumns = 
    @JoinColumn(name = "eId"), inverseJoinColumns = 
    @JoinColumn(name = "fId")) 
    private Collection<EntityF> entityFs; 
    //... 
} 

는 또한이 다른 개체를 참조하십시오 : 내가 어떤 매핑을 할 경우 내가 먼저이 코드를 보여하자

enter image description here

:

@Entity 
public class EntityF implements Serializable { 

    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long fId;  
    private Collection<EntityE> entityEs; 
    //... 
} 

이 내가 데이터베이스에서 무엇을 얻을

내 의심 사항은 다음과 같습니다.

- @ManyToMany 관련성을 만들고 싶습니다. EntityE가 관계의 소유자 인 nship은이 접근법이 맞습니까?

- 관계가 단방향이어야하므로 EntityB_EntityF라는 하나의 조정자 테이블 만 생성해야합니다. 그러나 어떤 이유로 EntityF_EntityE라는 두 번째 테이블도 생성합니다. 나는 왜 그런지 이해하지 못합니까? 정상입니까? 그리고 만약 내가 그것을 고쳐야하지 않으면?

답변

2

좋아요. 약간의 실험을 한 후에 대답을 얻었습니다. 나는 그것이 정확하다고 생각하며, 이제는 내가봤을 때 효과가 있다고 생각합니다. 내가 한 일은 관계 이름을 추가하는 것입니다. 이름을 지정하지 않으면 이상한 이유로 쌍방향 관계가 만들어지기 때문입니다.

이 코드가 고정 참조 : 여기
@Entity 
public class EntityE implements Serializable { 

    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long eId; 
    @ManyToMany 
    @JoinTable(name="entitye_entityf",joinColumns = 
    @JoinColumn(name = "eId"), inverseJoinColumns = 
    @JoinColumn(name = "fId")) 
    private Collection<EntityF> entityFs; 

다른 엔티티입니다.

@Entity 
public class EntityF implements Serializable { 

    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long fId; 
    @ManyToMany 
    @JoinTable(name="entitye_entityf",joinColumns = 
    @JoinColumn(name = "fId"), inverseJoinColumns = 
    @JoinColumn(name = "eId")) 
    private Collection<EntityE> entityEs; 

이미지에서 볼 수 있듯이 내 의심을 해결할 수 있습니다. 이 답변이 다른 사람에게도 유용 할 수 있기를 바랍니다.

enter image description here

관련 문제