1

我有两个实体: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()

4

1 回答 1

1

没有行为差异。

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

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

于 2014-08-27T08:16:22.203 回答