gpt4 book ai didi

java - 如何在 JPA 中设置来自 @EmbeddedId 的反向引用

转载 作者:搜寻专家 更新时间:2023-10-31 20:06:43 24 4
gpt4 key购买 nike

有人知道是否可以从 JPA @EmbeddedId 中建立反向引用。

例如有一个实体的形式

@Entity
public class Entity1 {
@Id
@GeneratedValue
private String identifier;

private Entity1 relationToEntity1;
//Left out the getters and setters for simplicity
}

还有一个具有复杂嵌入式 Id 的实体。第二个实体的一部分是对其父实体的引用。像这样:

@Entity
public class Entity2 {
@EmbeddedId private Entity2Identifier id;
//Left out the getters and setters for simplicity.
}

@Embedabble
public class Entity2Identifier {
private String firstPartOfIdentifier;
private Entity1 parent;
//Left out the getters and setters for simplicity.
}

当我尝试通过 JPA(实现是 EclipseLink)将这样的构造保存到数据库时,我得到了以下形式的几个异常:



异常 [EclipseLink-93](Eclipse 持久性服务 - 1.1.0.r3639-SNAPSHOT):
org.eclipse.persistence.exceptions.DescriptorException 异常
异常描述:此描述符中不存在表 [ENTITY1]。
描述符:RelationalDescriptor(test.Entity2 --> [DatabaseTable(ENTITY2)])

有人遇到过这样的问题并有解决方案吗?

最佳答案

您要查找的是派生 ID。如果您使用的是 JPA 2.0,则以下内容将起作用。您真的不希望整个 Parent 成为 PK 的一部分,而只是 parent 的 PK。

@Entity
public class Entity1 {
@EmbeddedId
private ParentId identifier;

@OneToOne(mappedBy="relationToEntity1")
private Entity2 relationToEntity2;

//Left out the getters and setters for simplicity
}

@Entity
public class Entity2 {
@EmbeddedId private Entity2Identifier id;
//Left out the getters and setters for simplicity.

@MapsId("parentId")
@OneToOne
private Entity1 parent;

}

@Embedabble
public class Entity2Identifier {
private String firstPartOfIdentifier;
private ParentId parentId;
//Left out the getters and setters for simplicity.
}

关于java - 如何在 JPA 中设置来自 @EmbeddedId 的反向引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4634836/

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