Подтвердить что ты не робот

@ManyToMany без таблицы соединений (устаревшая база данных)

Мне нужно применить JPA в старой базе данных с ужасным дизайном. К сожалению, это невозможно изменить. К счастью, он доступен только для чтения.

Одна из самых странных вещей, которые я нашел, - это отношения "многие ко многим" без таблицы соединения (или промежуточного). Это упрощение структуры таблицы:

USER                      ACCESS
----                      ------
ID int primary key        ID int primary key
NAME varchar2(20)         NAME varchar2(20)
ACCESS_GROUP int          ACCESS_GROUP int
  • Столбцы ACCESS_GROUP могут повторяться в обеих таблицах
  • Один пользователь может быть связан с N ACCESS
  • Один ACCESS может быть связан с N USER

"Концептуально" эти таблицы должны быть сопоставлены с классами Java следующим образом:

public class User {
    private Integer id;
    private String name;
    @ManyToMany private List<Access> accessList;
}

public class Access {
    private Integer id;
    private String name;
    @ManyToMany private List<User> userList;
}

Но я думаю, что это невозможно. Как вы думаете, лучший подход к доступу к этим таблицам в JPA и перемещение по ним?

4b9b3361

Ответ 1

Вы можете попытаться сопоставить его как два отношения "один ко многим" только для чтения:

public class User {
    @Column(name = "ACCESS_GROUP")
    private Integer group;

    @OneToMany
    @JoinColumn(name = "ACCESS_GROUP", referencedColumnName = "ACCESS_GROUP",
        insertable = false, updateable = false)
    private List<Access> accessList;
    ...
}

public class Access {
    @Column(name = "ACCESS_GROUP")
    private Integer group;

    @OneToMany
    @JoinColumn(name = "ACCESS_GROUP", referencedColumnName = "ACCESS_GROUP",
        insertable = false, updateable = false)
    private List<User> userList;
    ...
}