4

我正在将 Collection 更改为 SortedSet,因为我需要它始终保持与它们创建时相同的一致顺序。我已将模型属性从

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

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

以及所有相关功能,因此 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.

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

4

2 回答 2

5

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

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

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

于 2012-04-11T13:55:47.367 回答
0

SortedSetjavadoc来救援:

插入有序集合的所有元素都必须实现 Comparable 接口(或被指定的比较器接受)。

几乎可以肯定,Footnote不执行Comparable

于 2012-04-10T16:56:09.877 回答