一尘不染

@ManyToMany没有连接表(旧版数据库)

hibernate

我必须在设计糟糕的旧数据库中应用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列可以在两个表中重复
  • 一位用户可以与N个访问相关
  • 一个访问可以与N个用户相关

必须按照这种方式“概念上”将此表与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中访问此表并浏览它们的最佳方法是什么?


阅读 271

收藏
2020-06-20

共1个答案

一尘不染

您可以尝试将其映射为两个只读的一对多关系:

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;
    ...
}
2020-06-20