спящий режим: отображение тройной ассоциации - PullRequest
1 голос
/ 11 декабря 2010

Описание технологии: Спящая аннотация - 3.4.0.GA Ява 1,5

таблица : users_roles_branches столбцы : user_id, role_id, branch_id

Пользователю назначены разные роли для разных филиалов компании.

Теперь у меня есть один класс java pojo

     public class branch
     {
                @ManyToMany
             @JoinTable(name = "users_roles_branches", joinColumns = {   @JoinColumn(name="branch_id") }, inverseJoinColumns = { @JoinColumn(name = "role_id") })
             @MapKeyManyToMany(joinColumns = { @JoinColumn(name = "user_id", unique = false) })

                public Map<User, Role> getUserRoleMap() {
          return userRoleMap;
           }
     } 

Основным требованием является получение списка ролей, назначенных различным пользователям в филиале.

Проблема: поскольку одному пользователю может быть назначено несколько ролей, сопоставление не будет работать с данными сопоставления ролей пользователей.

Одним из решений может быть Map>, но я сомневаюсь, что смогу использовать вложенную коллекцию с hibernate.

Пожалуйста, помогите мне!

Если вопрос не понятен или не представлен в форме, пожалуйста, дайте мне знать.

1 Ответ

2 голосов
/ 15 декабря 2010

Я бы предложил ввести новую концепцию в вашу модель домена RoleAssignment:

class RoleAssignment {
  private User user; 
  private Branch branch;
  private Role role;
}

Объекты User, Branch и Role должны иметь отношение 1: N с RoleAssignment.Например:

class User { 
  private Set<RoleAssignment> roleAssignemnts;
}
...