【问题标题】:What is the difference between the owning entity and non-owning entity in a ManyToMany relationship (@JoinTable)?多对多关系 (@JoinTable) 中的拥有实体和非拥有实体有什么区别?
【发布时间】:2014-08-26 20:58:16
【问题描述】:

我有两个实体:Apikey 和 Api。这些是使用连接表连接的:

CREATE TABLE ACTIVE_APIS(
API_ID      INTEGER NOT NULL,
API_KEY_ID  INTEGER NOT NULL,
CONSTRAINT PK_API_ID_API_KEY_ID PRIMARY KEY (API_ID, API_KEY_ID),
CONSTRAINT FK_API_ID        FOREIGN KEY (API_ID)        REFERENCES  APIS (API_ID),
CONSTRAINT FK_API_KEY_ID    FOREIGN KEY (API_KEY_ID)    REFERENCES  API_KEYS (API_KEY_ID)
);

这之间的行为区别是什么(在 Apikey.class 中):

@ManyToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL)
@JoinTable(name="ACTIVE_APIS",
    joinColumns={
            @JoinColumn(name="API_KEY_ID", referencedColumnName="API_KEY_ID")
        }, 
        inverseJoinColumns={
            @JoinColumn(name="API_ID", referencedColumnName="API_ID")
        }
    )
private List<Api> activeapis;

还有这个(在 Api.class 中):

@ManyToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL)
@JoinTable(name="ACTIVE_APIS",
    joinColumns={
            @JoinColumn(name="API_ID", referencedColumnName="API_ID")
        }, 
        inverseJoinColumns={
            @JoinColumn(name="API_KEY_ID", referencedColumnName="API_KEY_ID")
        }
    )
private List<Apikey> apikeys

我怀疑这与删除有关,但文档什么也没说:http://docs.oracle.com/javaee/7/api/javax/persistence/JoinTable.html#joinColumns()

【问题讨论】:

    标签: jakarta-ee many-to-many jointable jpa-2.1


    【解决方案1】:

    没有行为差异。

    由于任何一个实体表中都没有连接列,因此无法确定关系的拥有/反向。相反,每一方都可以同时被视为拥有方和反方。

    注释的放置位置是一个选择问题,只是不要将它们放在两边 - 如果您依赖默认命名约定,mappedBy 属性也同样有效。

    【讨论】:

      猜你喜欢
      • 2015-12-18
      • 2019-07-05
      • 2014-03-20
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 2012-12-12
      • 2020-04-10
      • 2015-01-31
      相关资源
      最近更新 更多