gpt4 book ai didi

java - 保存实体后 Hibernate 一对一和多对一关系的奇怪行为

转载 作者:太空宇宙 更新时间:2023-11-04 10:21:15 25 4
gpt4 key购买 nike

我将 Spring Boot 与 Spring Data 结合使用,并使用 CrudRepository 来保存实体。我有 2 个实体:Org 和 OrgDef。这个想法是为一个组织存储多个定义。 Org 是不可变的部分,而 OrgDef 是可变的。代码如下:

@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
@Entity
@Table(name = "org", uniqueConstraints = {
@UniqueConstraint(columnNames = { "code" }, name = "uk_org_code"),
@UniqueConstraint(columnNames = { "definition_id"},
name = "uk_org_definitionId")})
public class Org {

@Id
@Column(
name = "id",
updatable = false,
nullable = false
)
protected UUID id = UUID.randomUUID();

@Column(updatable = false)
protected String code;

@JoinColumn(nullable = false, foreignKey = @ForeignKey(name = "fk_org_definition_orgDef"))
@OneToOne(optional = false, cascade = { CascadeType.PERSIST, CascadeType.MERGE })
protected OrgDef definition;

}



@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
@Setter
@Entity
@Table(name = "org_def")
public class OrgDef extends UuidIdEntity {

@Id
@Column(
name = "id",
updatable = false,
nullable = false
)
protected UUID id = UUID.randomUUID();

@JoinColumn(foreignKey = @ForeignKey(name = "fk_orgDef_orgId_org"), updatable = false)
@ManyToOne
protected Org org;

@JoinColumn(foreignKey = @ForeignKey(name = "fk_orgDef_parentId_org"))
@ManyToOne
protected Org parent;
}

我还想指出,Org 与 OrgDef 具有一对一关系,OrgDef 与 Org 具有多对一关系。 OrgDef 还有“父”字段,也具有多对一关系。当我保存此类的记录时,我的表中有以下内容:

组织表:

enter image description here

OrgDef 表: enter image description here

可以看到表OrgDef中的org_id字段为空,但parent_id不为空。但是在保存时,我为 OrgDef 对象中的 orgparent 字段指定 Org 对象。可能是映射有问题?有人可以帮忙吗?因为OrgDefparent字段保存得很好,但是OrgDef中的org字段没有保存!我的期望是 org_idparent_id 都不会为空

最佳答案

我发现了问题,我在 OrgDef 类的 org 字段上使用了这个注释:

@JoinColumn(foreignKey = @ForeignKey(name = "fk_orgDef_orgId_org"), updatable = false)

我指定该字段不可更新,因此 hibernate 无法向该字段插入值。我从此注释中删除了 updatable = false ,现在一切正常!

关于java - 保存实体后 Hibernate 一对一和多对一关系的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51147438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com