找回密码
 立即注册
ACCESSprivateGROUPNAME | 软件设计/软件工程 2022-05-04 238 0star收藏 版权: . 保留作者信息 . 禁止商业使用 . 禁止修改作品
问题
我不得不在设计糟糕的遗留数据库中应用 JPA。不幸的是无法改变它。幸运的是,只有只读访问权限。

我发现的最奇怪的事情之一是“多对多”。没有连接(或中间)表的关系。这是表结构的简化:
  1. USER                      ACCESS
  2. ----                      ------
  3. ID int primary key        ID int primary key
  4. NAME varchar2(20)         NAME varchar2(20)
  5. ACCESS_GROUP int          ACCESS_GROUP int
复制代码

“概念上”该表必须通过以下方式映射到 Java 类:
  1. public class User {
  2.     private Integer id;
  3.     private String name;
  4.     @ManyToMany private List<Access> accessList;
  5. }

  6. public class Access {
  7.     private Integer id;
  8.     private String name;
  9.     @ManyToMany private List<User> userList;
  10. }
复制代码

但我不认为这是可能的。您认为在 JPA 中访问这些表并浏览它们的最佳方式是什么?

回答
您可以尝试将其映射为两个只读的一对多关系:
  1. public class User {
  2.     @Column(name = "ACCESS_GROUP")
  3.     private Integer group;

  4.     @OneToMany
  5.     @JoinColumn(name = "ACCESS_GROUP", referencedColumnName = "ACCESS_GROUP",
  6.         insertable = false, updateable = false)
  7.     private List<Access> accessList;
  8.     ...
  9. }

  10. public class Access {
  11.     @Column(name = "ACCESS_GROUP")
  12.     private Integer group;

  13.     @OneToMany
  14.     @JoinColumn(name = "ACCESS_GROUP", referencedColumnName = "ACCESS_GROUP",
  15.         insertable = false, updateable = false)
  16.     private List<User> userList;
  17.     ...
  18. }
复制代码






上一篇:使阵列短路。 forEach 类调用中断
下一篇:空格分隔列表中的字符串