Java 如何在@ElementCollection上指定主键

Java 如何在@ElementCollection上指定主键,java,hibernate,jpa,orm,hibernate-mapping,Java,Hibernate,Jpa,Orm,Hibernate Mapping,所以,如果某些表缺少主键,innodb的这种行为可能会导致问题 因此,对于Hibernate,我正在寻找一个键来指定@ElementCollection表上的主键,该表的数据结构为Set 我找到了一种方法,可以用一个地图来设置主键,但这有点奇怪,因为我不需要地图 我还发现了一个与@Embeddeble相关的答案,但我不需要那种复杂性。我在实体中使用一个或多个集合作为数据结构 知道如何实现这一点吗?@ElementCollection不能使用主键,因为可嵌入的类型不能有标识符 您可以选择如何优化生

所以,如果某些表缺少主键,innodb的这种行为可能会导致问题

因此,对于Hibernate,我正在寻找一个键来指定@ElementCollection表上的主键,该表的数据结构为Set

我找到了一种方法,可以用一个地图来设置主键,但这有点奇怪,因为我不需要地图

我还发现了一个与@Embeddeble相关的答案,但我不需要那种复杂性。我在实体中使用一个或多个集合作为数据结构


知道如何实现这一点吗?

@ElementCollection
不能使用主键,因为可嵌入的类型不能有标识符

您可以选择如何优化生成SQL语句


如果需要主键,则应将
@ElementCollection
转换为
@OneToMany
关联。

如果使用集合并使元素列不为null,则hibernate将使用联接列和元素列生成主键

例如:

@Column(name = "STRINGS", nullable = false)
@ElementCollection
private Set<String> strings;
@Column(name=“STRINGS”,nullable=false)
@元素集合
私有集字符串;

使用类似@ManyTo*-的关系:如果你有一个主键,那么你就有了一个新实体。只为一组int创建一个新实体有点烦人。你对此有什么参考吗?我在答案中链接的文章是一个很好的起点。然后您必须手动生成模式以创建PK,因为Hibernate仅支持entities.Oops上的PK。这不是性能问题,而是MySQL复制问题,所以我认为@OrderColumn不会救我。我真正的问题是:你有关于hibernate限制的参考资料吗?我没有其他参考资料,只是我发给你的。很好的简单解决方案。为我工作。必须使用@Column(nullable=false)设置NotNull,并且不使用@NotNull注释@列(nullable=false)用于指示数据库架构详细信息。有关更多详细信息,请参阅