具有复合id的JPA可嵌入实体

时间:2014-07-10 07:25:27

标签: java hibernate jpa

我认为我有一个相当简单的架构,但我无法找到正确的映射方式。

@Entity
class Satellite {
   @Id
   private int id;
   // stuff
   @ElementCollection @OrderBy(value = "orbit asc")
   private List<DataModel> dataModel;
}

可嵌入类如下:

class DataModel {
    private int orbit;
    private int data;
}

问题是,每个卫星的轨道应该是唯一的。在我看来,表示datamodel的表具有由卫星id和轨道组成的复合主键。但我无法找到正确的映射方式。如果我将DataModel声明为普通实体,我必须添加一个映射到manytoone的卫星字段和一个包含卫星和轨道的复合主键,但它不起作用(堆栈溢出!!)。

我使用hibernate作为持久性提供程序。

1 个答案:

答案 0 :(得分:0)

  

如果我将DataModel声明为普通实体,我必须添加一个映射到manytoone的卫星字段和一个包含卫星和轨道的复合主键。

在数据库级别上你必须这样做,即包含DataModel的表需要卫星的外键。在这种情况下,我没有理由不让DataModel成为一个实体:

@IdClass( DMKeyClass.class )
@Entity
class DataModel {
  @Id
  private Satellite sat;
  @Id
  private int orbit;
  private int data;
}

class DMKeyClass {
  public int sat;
  public int orbit;
}