我想要做的是让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中的主键相同的类型。此处介绍
然后,在Object1中,可以使用标准的OneToMany映射,该映射指向Object1-ManyToOne映射。唯一缺少的部分是MapKey:
@Entity
public class Object1{
...
@OneToMany(mappedBy="object1")
@MapKey(name="object2")
private Map<Object2,Object3> property1;
...
}