gpt4 book ai didi

java - EclipseLink:实体的 key 映射,其中实体的 PK 是映射中的 key

转载 作者:太空宇宙 更新时间:2023-11-04 13:09:41 24 4
gpt4 key购买 nike

我想要做的是让Object3实体的主键包含其父Object1(@ManyToOne)和Object2,Object2是Object3在Object1(property1)中与映射中配对的键。这可以通过 EclipseLink 来完成吗?或许可以通过注释来实现?

我希望这是有道理的,总结一下:Object3 的 PK 是 (Object1,Object2)

@Entity
public class Object1{
...
private Map<Object2,Object3> property1;
...
}

@Entity
public class Object3{
@Column(name = "c1")
private int number;
@ManyToOne
@JoinColumn(name = "Object1")
private Object1 object1;
...
}

感谢您的帮助!

最佳答案

这样看 - 您要传递什么给 em.find 并获取特定的 Object3 实例? Object3 需要映射到其所有外键字段以用作其主键,否则它不是一个独立的实体。像这样的东西:

  @Entity
@IdClass(Object3PK.class)
public class Object3{
@Column(name = "c1")
private int number;
@Id
@ManyToOne
@JoinColumn(name = "Object1")
private Object1 object1;
@Id
@ManyToOne
@JoinColumn(name = "Object2")
private Object2 object2;
...
}

public class Object3PK{
private int object1;
private int object2;
}

在上面,Object3PK 必须使用与 Object1 和 Object2 中的主键相同的类型。这是描述的here

然后,在 Object1 中,您可以使用指向 Object1 ManyToOne 映射的标准 OneToMany 映射。唯一缺少的部分是 MapKey :

  @Entity
public class Object1{
...
@OneToMany(mappedBy="object1")
@MapKey(name="object2")
private Map<Object2,Object3> property1;
...
}

关于java - EclipseLink:实体的 key 映射,其中实体的 PK 是映射中的 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34096052/

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