JPA ManyToMany поля - PullRequest
       20

JPA ManyToMany поля

1 голос
/ 09 декабря 2011

Я использую шовный каркас и JPA.
У меня есть разрешение объекта, которое содержит (id_permission, action_permission ,criminator_permission) и роль объекта, которая содержит (id_role, name_role)

Я использую двунаправленную ассоциацию ManyToMany между этими двумя объектами, которые генерируют таблицу соединений AccountPermission, которые содержат (id_permission, id_role, name_role, action_permission, дискриминация_permission)

@ManyToMany
@JoinTable(name="AccountPermission",
           joinColumns={@JoinColumn(name="role_id",
                                    referencedColumnName="role_id"),
                        @JoinColumn(name="name_role",
                                    referencedColumnName="name_role"),},
           inverseJoinColumns={@JoinColumn(name="action_permission",
                                 referencedColumnName="action_permission"),
                               @JoinColumn(name="discriminator_permission",
                                 referencedColumnName="discriminator_permission"),
                               @JoinColumn(name="permission_id",
                                 referencedColumnName="permission_id")})

public List<Permission> getPermissions() {
    return permissions; 
}   

public void setPermissions(List<Permission> permissions) {
    this.permissions = permissions; 
}

Итак, как вы видите, все атрибуты, затронутые в таблице соединения, взяты из двух таблиц. Моя проблема связана с атрибутом "name_role", который я не хочу иметь с ним, потому что это редактируемый атрибут. так как я могу сохранить эти значения в таблице соединения, не делая соединения.

1 Ответ

3 голосов
/ 09 декабря 2011

Что является первичным ключом этих двух таблиц.Я предполагаю, что id_role является первичным ключом для роли, а id_permission является первичным ключом для разрешения.

В этом случае таблица объединения должна содержать только идентификаторы обеих таблиц:

@ManyToMany   
@JoinTable(name = "AccountPermission",
           joinColumns = {@JoinColumn(name="role_id")}
           inverseJoinColumns = {@JoinColumn(name="permission_id"})
public List<Permission> getPermissions()
...