EclipseLink:密钥到实体的映射,其中实体的PK是映射中的密钥



我想要做的是让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;
    ...
  }

最新更新