2009-05-28 11 views
2

私はエンティティのリスト(Class)を取り、計算を行うメソッドを持っています。ここに私のニーズを説明するには方法(擬似コード)の最も簡単な概要です:HibernateはcreateCriteria()の結果からIDを取得しています

public void do(List<Class<?> entities) { 
    for (Class<?> entity : entities) { 
     List<?> list = session.createCriteria(entity).list(); 
     for (Object o : list) { 
      System.out.println(o.getClass().getSimpleName() + " " + o.getId()); 
     } 
    } 
} 

は、私がアクセスできる方法はありますか/ oのIDを取得しますか?

答えて

0

すべてのエンティティで同じ名前のプロパティを持たない限り、リフレクションを使用してそのプロパティのゲッターを呼び出すことはできません。

public interface EntityWithId { 
    Integer getId(); 
    void setId(Integer id); 
} 

あなたのidのが整数でない場合:彼らはすべての異なるものを命名している場合は、NoSuchMethodException

+0

getId()メソッドがあることを保証することができ、「例外」を取得するリスクがあります。 – nimcap

1

は、まあ、それは多くの批評家を取得しますが、すべてのエンティティ・クラスは、このインタフェースを実装することになるだろうインターフェースは可能性ができる:

public interface EntityWithId<T> { 
    T getId(); 
    setId(T id); 
} 

public class Entity implements EntityWithId<String> { 
    private String id; 

    public String getId() { 
     return id; 
    } 
    public void setId(String id) { 
     this.id = id; 
    } 
    . 
    . 
    . 
} 

とにかくすべてのあなたのエンティティのIDを取得したいと思いますなぜ、私は見ていない、それは笑、奇妙な要件のための奇妙なソリューションです。

+0

私はこれまでとほとんど同じことをやっていましたが、必要なことをするための別の方法を見つけたので停止しました。私は一般的に、マップされたすべてのエンティティクラスが空のマーカーインターフェイスを実装しています。 – araqnid

関連する問題