我必须在设计糟糕的旧数据库中应用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; ... }