JPA可选关系
JPA optional relationship
我正在使用 EclipseLink。
我有一个与 DIDAllocation 具有一对多关系的实体 DIDRequest。
DIDRequest 并不总是有关联的 DIDAllocation(即 DIDAlloction 应该是可选的)。
我有以下实体
@Entity
@Table(name = "tblDIDRequest")
public class DIDRequest
{
int id;
@ManyToOne(optional = true)
private DIDAllocation didAllocation;
}
optional
参数似乎不起作用,因为 EclipseLink 正在生成一个外键约束,如下所示:
CREATE TABLE `tblDIDRequest` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`DIDALLOCATION_ID` bigint(20) DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `FK_tblDIDRequest_DIDALLOCATION_ID` (`DIDALLOCATION_ID`),
CONSTRAINT `FK_tblDIDRequest_DIDALLOCATION_ID` FOREIGN KEY (`DIDALLOCATION_ID`) REFERENCES `tblDIDAllocation` (`ID`),
);
如何修改注释使其不生成外键约束?
有没有一种方法可以有约束,所以如果 didAllocation 存在,那么一定有一个相关的实体,但如果它为 null 我们不关心?
这就像它应该的那样工作!
A required 关联可以通过在列上设置 NOT NULL 约束(以确保它具有值)以及 FOREIGN KEY 约束来映射,以确保值对应另一个table.
中的ID
如果您有一个 optional 关联,您仍然需要一个 FOREIGN KEY 约束,所以您不能只是将乱码放入列中。但是你没有 NOT NULL 约束,所以 NULL 表示 "the association is not present".
`DIDALLOCATION_ID` bigint(20) DEFAULT NULL,
这是可以为 null 的,默认值为 NULL。
您可能还想在关联上设置 fetch = FetchType.LAZY
并明确地 join/eager-fetch 只有在需要时才设置它 - 以提高效率。总的来说,我强烈推荐 Vlad Mihalcea 的所有文章,以了解有关高效使用 JPA 的更多信息:https://vladmihalcea.com/manytoone-jpa-hibernate/
我正在使用 EclipseLink。
我有一个与 DIDAllocation 具有一对多关系的实体 DIDRequest。
DIDRequest 并不总是有关联的 DIDAllocation(即 DIDAlloction 应该是可选的)。
我有以下实体
@Entity
@Table(name = "tblDIDRequest")
public class DIDRequest
{
int id;
@ManyToOne(optional = true)
private DIDAllocation didAllocation;
}
optional
参数似乎不起作用,因为 EclipseLink 正在生成一个外键约束,如下所示:
CREATE TABLE `tblDIDRequest` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`DIDALLOCATION_ID` bigint(20) DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `FK_tblDIDRequest_DIDALLOCATION_ID` (`DIDALLOCATION_ID`),
CONSTRAINT `FK_tblDIDRequest_DIDALLOCATION_ID` FOREIGN KEY (`DIDALLOCATION_ID`) REFERENCES `tblDIDAllocation` (`ID`),
);
如何修改注释使其不生成外键约束?
有没有一种方法可以有约束,所以如果 didAllocation 存在,那么一定有一个相关的实体,但如果它为 null 我们不关心?
这就像它应该的那样工作!
A required 关联可以通过在列上设置 NOT NULL 约束(以确保它具有值)以及 FOREIGN KEY 约束来映射,以确保值对应另一个table.
中的ID如果您有一个 optional 关联,您仍然需要一个 FOREIGN KEY 约束,所以您不能只是将乱码放入列中。但是你没有 NOT NULL 约束,所以 NULL 表示 "the association is not present".
`DIDALLOCATION_ID` bigint(20) DEFAULT NULL,
这是可以为 null 的,默认值为 NULL。
您可能还想在关联上设置 fetch = FetchType.LAZY
并明确地 join/eager-fetch 只有在需要时才设置它 - 以提高效率。总的来说,我强烈推荐 Vlad Mihalcea 的所有文章,以了解有关高效使用 JPA 的更多信息:https://vladmihalcea.com/manytoone-jpa-hibernate/