我必须在遗留数据库中应用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列可以在两个表中重复
>一个USER可以与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中访问这些表的最佳方法是什么?
解决方法
您可以尝试将其映射为两个只读一对多关系:
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",updateable = false) private List<User> userList; ... }