@ManyToMany без таблицы соединений (устаревшая база данных) - PullRequest
10 голосов
/ 23 марта 2011

Я должен применить 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
  • Один доступ может быть связан с 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 и навигации по ним?

1 Ответ

9 голосов
/ 23 марта 2011

Вы можете попытаться отобразить его как два отношения «один ко многим» только для чтения:

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;
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...