2013-11-22 2 views
1

현재 세 개의 테이블이 있습니다. 사용자, 역할 및 기관.다수의 JPA 주석에 두 개 이상의 테이블이 있음

아시다시피 사용자 및 역할에는 많은 관계가 있습니다. 하나의 사용자는 여러 역할을 가질 수 있으며 하나의 역할은 여러 사용자를 가질 수 있습니다.

다음과 같이 여러 개의 주석을 만듭니다.

#In User Table. 
@ManyToMany 
@JoinTable(name = "USER_ROLES", 
     joinColumns = {@JoinColumn(name = "USER_ID")}, 
     inverseJoinColumns = {@JoinColumn(name = "ROLE_ID")} 
) 
private Set<Role> roles = new HashSet<Role>(); 

#In Role Table. 
@ManyToMany 
@JoinTable(name = "USER_ROLES", 
     joinColumns = {@JoinColumn(name = "ROLE__ID")}, 
     inverseJoinColumns = {@JoinColumn(name = "USER_ID")} 
) 
private Set<User> users = new HashSet<User>(); 

그러나 나중에 나는 사용자가 하나 개의 기관의 역할과 다른 기관에서 다른 역할 또는 다른 기관에서 같은를 가질 수 있음을 깨달았다. 어떻게 관계를 설정할 수 있습니까?

답변

1

우선, 많은 매핑을 간단히하는 것은 잘못되었습니다. 양방향 연관의 한쪽은 mappedBy 특성을 사용하여 반대면이어야합니다. 예를 들면 다음과 같습니다.

@ManyToMany(mappedBy = "roles") 
private Set<User> users = new HashSet<User>(); 

이제 질문에 대답하면 엔티티가 하나 더 필요합니다. 참여라고 부르 자. 참여는 특정 기관에서 주어진 사용자의 역할을 포함합니다. - OneToMany - 참여

  • 참여 - ManyToOne - 역할
  • 참여 - ManyToOne - 기관
    • 사용자 : 그래서, 당신은 다음과 같은 locical 협회가