1

让我上课

class Foo

并且有这个类的两个比较器

class Comparator1 implements Comparator<Foo>  
class Comparator2 implements Comparator<Foo>  

现在我在课堂TreeSet上使用对象。FooBar

class Bar  
{  
   private SortedSet<Foo> foos = new TreeSet(new Comparator1());  
}  

在 xml 映射中

  <set name="foos"
     sort="com.package.Comparator2"
     fetch="subselect">
     <key column="column" not-null="true"/>
     <one-to-many class="Foo" />
  </set>  

从数据库加载集合后,休眠将使用哪个比较器,持久化后将使用哪个比较器?
我可以在本地修改中使用Comparator1,但用于加载和保存Comparator2

4

2 回答 2

2

当 Hibernate 从 DB 加载实体时,任何集合都将被重写,因为它需要使用自己的 Set 实现。如果您创建了一个全新的对象并将其持久化,那么 Comparator1 仍在使用中,因为它仍然是您的集合,它不是 Hibernate 的代理。

于 2012-09-17T13:30:09.370 回答
1

从我在这里读到的内容来看,数据库中的数据将使用排序Comparator2,当您加载数据时,它自然会使用Comparator2.

于 2012-09-17T13:31:10.230 回答