从Collection更改为SortedSet

Web*_*net 4 java spring jpa

我正在将Collection更改为SortedSet,因为我需要它始终与创建它们的顺序一致.我已经更改了我的模型属性

@OneToMany(cascade = CascadeType.ALL, mappedBy = "contentId")
private Collection<Footnote> footnoteCollection;
Run Code Online (Sandbox Code Playgroud)

@OneToMany(cascade = CascadeType.ALL, mappedBy = "contentId")
private SortedSet<Footnote> footnoteSortedSet;
Run Code Online (Sandbox Code Playgroud)

以及所有相关功能,使Netbeans不再显示任何错误.当我运行应用程序时,我收到错误:Exception Description: Could not load the field named [footnoteSortedSet] on the class [class com.mysite.cmt.model.Content_]. Ensure there is a corresponding field with that name defined on the class.

由于我刚刚改变了这一点并重新启动了我的应用程序,我正在努力弄清楚为什么它说它没有设置......

Jam*_*mes 5

您获得的错误似乎来自JPA元模型.我假设你以某种方式生成这个,如果你不在Criteria中使用元模型,那么你不需要这个,错误就会消失.

问题是JPA只允许集合接口,Map,List,Set,Collection.因此,虽然您可以在新实例中使用SortedSet,但从数据库读取的对象将使用特殊的惰性List实现.

在EclipseLink中,如果将映射标记为EAGER,则可以使用SortedSet.我认为元模型错误已修复,请尝试最新版本.

  • 使用 EclipseLink 2.6.4,确实需要将映射标记为 EAGER,但另一个问题是我无法使用接口类型 `SortedSet`。这样做会导致如下异常:“异常描述:类 [interface java.util.SortedSet] 无法用作查询结果的容器,因为它无法实例化。”如果我将属性类型设置为“相反,TreeSet` 一切正常。 (2认同)