使用 Set JPA 在 @ElementCollection 中维护顺序

Ric*_*d G 2 jpa spring-mvc

我在 JPA 和 Hibernate 方面遇到了很多问题。最大的问题是发出如此多的查询,速度太慢了。

因此,为了反驳我已将所有关系切换到 Set 并使用 fetch joins 在一个请求中获取对象图的说法。

结果,我无法切换到 List 来获取一组有序的值,因为存储库在启动时抛出一个异常,即一旦我尝试加入多个实体,Hibernate 就不会处理同步的持久包。

所以我发现了一个名为 @OrderColumn 的新 JPA 2.0 功能 - 但我不确定如何将它应用于 ElementCollection:

@ElementCollection(fetch = FetchType.LAZY)
@CollectionTable(name = "variant_option_vals",
        joinColumns = @JoinColumn(name = "variantOption_id")
@OrderColumn(name="sequence")
)

private Set<String> optionValues;
Run Code Online (Sandbox Code Playgroud)

我添加了注释,但序列列被添加到基表,而不是 optionValues 表。

或者,有没有办法保持项目的自然顺序?即保持物品输入的顺序,并避免同时行李问题?

Dav*_* SN 7

@OrderColumn批注不能与集来使用,只能用列表。

OrderColumn文档文件说:

指定用于维护列表的持久顺序的。持久性提供者负责维护检索时和数据库中的顺序。持久性提供者负责在刷新到数据库时更新排序以反映影响列表的任何插入、删除或重新排序。

对于 Sets,唯一的选择是使用@OrderBy注解使用实体的字段进行排序,而不是 Set 的插入顺序。