问题
我不得不在设计糟糕的遗留数据库中应用 JPA。不幸的是无法改变它。幸运的是,只有只读访问权限。
我发现的最奇怪的事情之一是“多对多”。没有连接(或中间)表的关系。这是表结构的简化:
- USER ACCESS
- ---- ------
- ID int primary key ID int primary key
- NAME varchar2(20) NAME varchar2(20)
- ACCESS_GROUP int ACCESS_GROUP int
复制代码
“概念上”该表必须通过以下方式映射到 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 中访问这些表并浏览它们的最佳方式是什么?
回答
您可以尝试将其映射为两个只读的一对多关系:
- 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;
- ...
- }
复制代码
|