使用Set JPA在@ElementCollection中维护订单

时间:2015-02-26 09:19:01

标签: spring-mvc jpa

我在JPA和Hibernate方面遇到了很多问题。最大的问题是发出如此多的查询,这是非常缓慢的。

所以为了反驳我已经将所有关系切换到Set并且一直使用fetch join来在一个请求中获取对象图。

因此,我无法切换到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;

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

或者,有没有办法保持物品的自然顺序?即保持订单输入的顺序,并避免同时发出行李?

2 个答案:

答案 0 :(得分:2)

@OrderColumn注释不能与套数一起使用,只能与列表一起使用。

OrderColumn documentation文档说:

  

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

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

答案 1 :(得分:0)

尝试使用SortedSet作为该集的实现?