Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA嵌套复合PK_Java_Jpa - Fatal编程技术网

Java JPA嵌套复合PK

Java JPA嵌套复合PK,java,jpa,Java,Jpa,我正在尝试为以下PK需求配置JPA类: 主键为[Long id]的Writer类/表,例如[1]、[2]、[3] 具有[Writer Long id和Long index]复合主键的图书类/表,因此每个作者都有自己的图书索引,例如[1,1]、[1,2]、[1,3]作者1的三本书、[2,1]、[2,2]、[2,3]、[2,4]作者2的四本书 具有[Writer Long id、Book Long index和Long number]组合主键的页面类/表,因此每本书都有自己的页码,例如[1,1,1]

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

主键为[Long id]的Writer类/表,例如[1]、[2]、[3]

具有[Writer Long id和Long index]复合主键的图书类/表,因此每个作者都有自己的图书索引,例如[1,1]、[1,2]、[1,3]作者1的三本书、[2,1]、[2,2]、[2,3]、[2,4]作者2的四本书

具有[Writer Long id、Book Long index和Long number]组合主键的页面类/表,因此每本书都有自己的页码,例如[1,1,1]、[1,1,2]、[1,1,3]、[1,1,4]、[1,1,5]Writer 1及其书籍索引1的五页

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

我已经使用@Embedded | Id、@embeddeble、@IdClass、@MapsId等用尽了所有配置。我可以想到或用谷歌搜索,但Hibernate总是会以这样或那样的方式抱怨,尤其是在页面类中,事情变得“嵌套”。理想情况下,后面的段落类/表格的复合主键为[Writer Long id、Book Long index、Page Long number和Long paration index]

我希望有人对此有什么好的提示


谢谢大家!

使用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;
}
基本上,你希望你的模型看起来像什么