【发布时间】:2011-07-21 12:59:24
【问题描述】:
我必须在设计糟糕的遗留数据库中应用 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 中访问这些表并浏览它们的最佳方法是什么?
【问题讨论】:
-
其实这不是 M:M。您如何存储用户或访问行是两个访问组的一部分?实现这一目标的唯一方法是复制其他列(PK 除外),在这种情况下,从设计的角度来看,它们是不同的实体。相反,您拥有的是两个独立的 1:M 关系。
标签: java sql hibernate jpa jpa-2.0