Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.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/2/spring/14.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 带嵌入式的OneToMany不工作_Java_Spring_Hibernate_Jpa - Fatal编程技术网

Java 带嵌入式的OneToMany不工作

Java 带嵌入式的OneToMany不工作,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我将SpringBoot1.3.1与Hibernate4.3.11和JPA一起使用。我有以下映射: @Entity public class Game { @EmbeddedId private GameId id; @Embedded private Prize prize; } @Embeddable public class Prize { private String name; @OneToMany @Cascade(CascadeType

我将SpringBoot1.3.1与Hibernate4.3.11和JPA一起使用。我有以下映射:

@Entity
public class Game {
   @EmbeddedId
   private GameId id;

   @Embedded
   private Prize prize;
}

@Embeddable
public class Prize {
   private String name;
   @OneToMany
   @Cascade(CascadeType.ALL)
   private List<ImageReference> images;
}

@Entity
public class ImageReference {
  @EmbeddedId
  private ImageReferenceId id;
  private ImageType type;
  private ImageFormat format;
}

@Embeddable
public class GameId {
  private UUID id;
}

@Emdeddable
public class ImageReferenceId {
  private UUID id;
}

我在JPA规范中找不到如何将可嵌入类中的关系映射到DB的详细定义。在直接实体-一方关系(即多方上的外键)的情况下,如何映射它而不是连接表是默认的解决方案。您可以通过在
Prize

@OneToMany
@Cascade(CascadeType.ALL)
@JoinColumn(name="GAME_ID")
private List<ImageReference> images;
然后,
game_images
表将过时


编辑:
Hibernate有一个bug,它要求您在可嵌入类中的关系上放置一个
@JoinColumn
注释(即使没有任何注释值)如果要使用
@AssociationOverride

我在JPA规范中找不到如何将可嵌入类中的关系映射到DB的详细定义。在直接实体-一方关系(即多方上的外键)的情况下,如何映射它而不是连接表是默认的解决方案。您可以通过在
Prize

@OneToMany
@Cascade(CascadeType.ALL)
@JoinColumn(name="GAME_ID")
private List<ImageReference> images;
然后,
game_images
表将过时


编辑:
Hibernate有一个错误,要求您在可嵌入类中的关系上添加
@JoinColumn
注释(即使没有任何注释值),如果您想使用
@AssociationOverride

请发布执行保存的代码以及嵌入ID的代码。什么是
game\u图像
表?添加了代码。
game\u images
表包含游戏id和图像引用id之间的关联,因此数据库知道哪些图像是什么游戏/奖品的一部分。在这种情况下,是连接表-您是如何配置该名称的?默认情况下,JPA提供商将把连接表命名为
game\u image\u reference
。您是否有未显示的
@JoinTable
批注?我没有配置名称,也没有@JoinTable批注。它似乎是
游戏
与ImageReferences列表属性名称(
图像
)的串联。如果我更改了该名称,则联接表的名称也会更改。请发布进行保存的代码以及嵌入ID的代码。什么是
game\u图像
表?添加了代码。
game\u images
表包含游戏id和图像引用id之间的关联,因此数据库知道哪些图像是什么游戏/奖品的一部分。在这种情况下,是连接表-您是如何配置该名称的?默认情况下,JPA提供商将把连接表命名为
game\u image\u reference
。您是否有未显示的
@JoinTable
批注?我没有配置名称,也没有@JoinTable批注。它似乎是
游戏
与ImageReferences列表属性名称(
图像
)的串联。如果我更改了该名称,联接表的名称也会更改。谢谢。但是,这会导致在我的
image\u reference
表中出现一个GAME\u ID列,这是我不希望看到的,因为ImageReference对象不仅用于游戏/奖品对象,还用于其他对象。(顺便说一句,
@AssociationOverride
替代方案似乎不起作用,它允许
非法尝试使用mappedBy关联定义@JoinColumn:prize.images
)我添加了有关导致此异常的Hibernate错误的信息。我理解你为什么喜欢使用联合桌。也许我会研究更多如何修复它。谢谢你。但是,这会导致在我的
image\u reference
表中出现一个GAME\u ID列,这是我不希望看到的,因为ImageReference对象不仅用于游戏/奖品对象,还用于其他对象。(顺便说一句,
@AssociationOverride
替代方案似乎不起作用,它允许
非法尝试使用mappedBy关联定义@JoinColumn:prize.images
)我添加了有关导致此异常的Hibernate错误的信息。我理解你为什么喜欢使用联合桌。也许我会调查更多如何修复它。
@Embedded
@AssociationOverride(name= "images", joinColumns = @JoinColumn(name="GAME_ID"))
private Prize prize;