当前位置: 首页 > 面试题库 >

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

江衡
2023-03-14
问题内容

我必须在设计糟糕的旧数据库中应用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中访问此表并浏览它们的最佳方法是什么?


问题答案:

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

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;
    ...
}


 类似资料:
  • 问题内容: 我必须在设计糟糕的旧数据库中应用JPA。不幸的是无法更改它。幸运的是,仅用于只读访问。 我发现的最奇怪的事情之一是没有联接(或中间)表的“多对多”关系。这是表结构的简化: ACCESS_GROUP列可以在两个表中重复 一位用户可以与N个访问相关 一个访问可以与N个用户相关 必须按照这种方式“概念上”将此表与Java类映射: 但是我认为这是不可能的。您认为在JPA中访问此表并进行浏览的最

  • 是否可以在没有数据库连接的情况下运行我的测试?如果是,我做错了什么/错过了什么?

  • 我有这些实体: 用户 角色 权限 一个用户有很多角色,一个角色有很多权限。 null

  • 我知道spring-retry不会抓取数据库连接。 我们已经用@Retryable包装了一个RESTendpoint,试图实施重试功能,但它并没有像预期的那样工作。我已经预料到,当由于而引发SQLExc,下一次尝试将从池中获取新连接。我面临一个问题,如果我们在处理过程中关闭MySQL数据库,sping-retry会重试方法调用,但不会获得新的数据库连接。结果,所有重试都失败,但对RESTendpo

  • 问题内容: 我正在使用Hibernate 3.3.1,并正在对该示例表结构进行建模,但是在创建具有额外属性的联接表时遇到了麻烦。 是和表之间的多对多关系。联接表就是该表。我遵循这里提到的方法。 现在我有了实体 和 和 和 我使用Apache Derby进行测试,但是在生成的表结构上遇到了麻烦。 看来它已经创建了我所有的列作为主键。为什么会这样呢? 问题答案: 您可以使用实体的类作为IdClass的