使用Javers审核SortedSet属性会产生java.lang.ClassCastException

时间:2018-10-19 03:15:56

标签: java hibernate javers

我正在尝试使用Javers审核SortedSet属性,但是在尝试进行提交时,我不断收到以下异常。

java.lang.ClassCastException: org.javers.core.metamodel.object.InstanceId cannot be cast to java.lang.Comparable
at java.util.TreeMap.compare(TreeMap.java:1188)
at java.util.TreeMap.put(TreeMap.java:531)
at java.util.TreeSet.add(TreeSet.java:255)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:60)
at com.google.gson.Gson.fromJson(Gson.java:803)

当我尝试审核Set类型而不是SortedSet类型的属性时,不会发生这种情况。 (此外,动物类实现Comparable和方法compareTo()) 任何帮助,将不胜感激。 谢谢。

1 个答案:

答案 0 :(得分:0)

基本(即未排序)Set仅包含元素。 SortedSet对这些元素应用排序,并且您必须以某种方式提供排序。例如,通过确保元素实现Comparable接口(用于自然排序)或提供Comparator

在您的情况下,排序比较似乎需要比较InstanceIds。 (要么是因为您将它们直接添加到集合中,要么是因为要添加的元素具有InstanceIds。)由于InstanceId未实现Comparable,因此会出现错误。

(如果您提供了更多代码,例如集创建和添加代码,则可能更清楚导致错误的原因。)