JPA嵌套复合PK

时间:2014-01-27 11:14:51

标签: java jpa

我正在尝试为以下PK要求配置JPA类:


一个 Writer 类/表,其PK为 [Long id] ,例如[1],[2],[3] ......

Book 类/表,其复合PK为 [Writer Long id and Long index] (因此每个作者都有自己的书籍索引),例如[1] ,1,[1,2],[1,3](作家#1的三本书),[2,1],[2,2],[2,3],[2,4](四本书)作家#2)......

Page 类/表,其复合PK为 [Writer Long id,Book Long index and Long number] (因此每本书都有自己的页码),例如[1,1,1],[1,1,2],[1,1,3],[1,1,4],[1,1,5](作家#1和他的5页书索引#1)......


我需要从Book实例中调用 book.getWriter()并获取一个Writer实例;另外, page.getBook()会返回一个Book实例。当然,所有三个类都可以很容易地拥有一个简单的长PK,然后,例如,一本书会将Writer作为PK之外的一个不可为空的@ManyToOne关联,但它不能满足我们的需求。


我已经用尽了@Embedded(| Id),@ Embeddable,@ IdClass,@ MatsId等的任何配置。我可以想到或者谷歌搜索,但是Hibernate总会抱怨这种或那种,特别是关于< strong>页面类,其中“嵌套”。理想情况下,应该同样配置后面的段落类/表,其复合PK为 [Writer Long id,Book Long索引,Page Long number和Long paragraph index] 。< / p>


我希望有人对此有任何好的提示。

谢谢!

1 个答案:

答案 0 :(得分:0)

使用ID类的简单示例:

@Entity
Class Writer {
  @ID Long id;
}
@Entity
@IdClass(BookId.class)
Class Book{
  @ID Long index;
  @ID Writer writer;
}
Class BookId{
  Long index;
  Long writer;
}
@Entity
@IdClass(PageId.class)
Class Page{
  @ID Long number;
  @ID Book book;
}
Class PageId{
  Long number;
  BookId book;
}
基本上,你希望你的模型看起来像什么?