2015-05-05 78 views
7

因此,如果某些表缺少主键,那么innodb就会导致问题。在@ElementCollection上指定一个主键

因此,在Hibernate中,我正在寻找一个用于指定@ElementCollection表上的主键并使用Set作为下划线数据结构的键。

我找到了一个有地图主键的方法,但它有点奇怪,因为我不需要地图。

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

任何想法如何实现?

+0

使用@ ManyTo *类似的关系:如果你有一个主键,那么你有一个新的实体。 –

+1

仅仅为一组int创建一个新的实体是很烦人的。 – plcstpierre

回答

8

如果您使用Set并使元素Column不为null,则hibernate将使用连接列和元素列创建主键。

+1

好简单的解决方案。为我工作。 –

+2

非null必须使用@Column(nullable = false)进行设置,并且不能使用@NotNull注释。 @Column(nullable = false)用于指示数据库模式细节。请参阅[@NotNull vs @Column(nullable = false)](https://stackoverflow.com/a/7439544/1997088)以获取更多详细信息 – Black

2

@ElementCollection不能取主键,因为Embeddable类型不能有标识符。你可以add an @OrderColumn来优化生成SQL语句。

如果您需要一个主键,那么您应该将@ElementCollection关联为@OneToMany关联。

+0

你有什么参考? – plcstpierre

+0

我在答案中链接的文章是一个很好的起点。然后你必须手动生成模式来创建PK,因为Hibernate只支持实体上的PK。 –

+0

糟糕。这不是性能问题,而是MySQL复制,所以我不认为@OrderColumn会救我。我真正的问题是:你有没有参考hibernate的限制? – plcstpierre