1

授業をしましょう

class Foo

このクラスには2つのコンパレータがあります

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

現在、クラスTreeSetFooオブジェクトを使用していますBar

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が独自のSetの実装を使用する必要があるため、HibernateがDBからエンティティをロードする間にコレクションはすべて書き換えられます。まったく新しいオブジェクトを作成して永続化した場合、Comparator1は引き続き使用されます。これは、コレクションであり、Hibernateのプロキシではないためです。

于 2012-09-17T13:30:09.370 に答える
1

ここで読んだ内容から判断すると、データベース内のデータはを使用して並べ替えられ、Comparator2データをロードするときに自然にを使用しますComparator2

于 2012-09-17T13:31:10.230 に答える