【问题标题】:How to handle many-to-many link tables with additional columns如何处理带有附加列的多对多链接表
【发布时间】:2010-05-10 12:54:59
【问题描述】:

假设以下示例性 DB-Design:

USERS
-----------------
ID
NAME


ROLES
-----------------
ID
NAME


USERS_ROLES
-----------------
FK_USER_ID
FK_ROLE_ID
LOGIN
PASSWD

我使用 xml 将这种关系映射到 eclipse-link。 用户:

<many-to-many name="roles" mapped-by="users">
  <join-table name="USERS_ROLES">
    <join-column name="USER_ID" />
    <inverse-join-column name="ROLE_ID" />
  </join-table>
</many-to-many>

为了完整起见,角色的对应映射:

<many-to-many name="users" mapped-by="roles">
  <join-table name="USERS_ROLES">
    <join-column name="FK_ROLE_ID" />
    <inverse-join-column name="FK_USER_ID" />
  </join-table>
</many-to-many>

现在我还可以为链接表创建一个映射,但是我必须做些什么才能访问链接表的属性(映射到 java 对象/类)? 如果用户登录,选择他们感兴趣的角色并输入一致的密码,我需要它。当然,使用当前设置,我可以获得用户分配的所有角色,反之亦然,但我无法与登录数据或任何其他与用户和角色的关系相对应的属性进行比较。 简而言之:我不知道如何访问链接表的属性或如何在 mapping-xml 中映射它。

提前致谢!

【问题讨论】:

    标签: java orm jpa eclipselink


    【解决方案1】:

    虽然它不是 M-N。它是 2 个 1-N 的中间类(包含登录名和密码)。

    【讨论】:

    • 这是登录信息绑定到用户的一般方式,但我需要为每个用户角色关系提供不同的登录信息。所以如果用户想以role1登录,那么他们需要输入不同的登录信息以及他们想以role2登录。
    • 有很多方法可以通过类来做到这一点;我只是说它不是 M-N 关系——没有这样的 Java 容器允许关系上的属性。因此,您将属性拆分为一个中间类,或者将其作为 Role 的相关对象。
    • 嗯,对不起,但我不能同意。我想我需要一种方法来创建一个模型/实体,该模型/实体映射/表示具有附加属性的链接表并将其绑定到用户和角色实体。因此,我应该有办法通过用户/角色组合获取附加到“链接实体”的信息。但我不知道我应该如何实现与这样一个“链接实体”的绑定。
    • 我已经告诉过你创建一个中间类来表示属性。根据datanucleus.org/products/accessplatform/guides/jdo/… 如果你不想那么罚款。这是一个解决方案
    • 哦,好吧...对不起我的错。这就是我正在寻找的。多谢!我还决定使用注释而不是 xml 映射。对于后人,我还找到了一个使用 Eclipse-Link 实现它的示例:en.wikibooks.org/wiki/Java_Persistence/… Thx to DataNucleus!
    猜你喜欢
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多