2009-06-11 5 views
0

を使用して具体的なクラスを探す:私は、このメソッドのシグネチャ持つ(クラスのインスタンスは、DAOに渡される)動的な表現

    public int nrOfEntities(Class<? extends MailConfirmation> clazz, User user, String email) 
    

    を私はnrOfEntitiesは、エンティティの数を返したいですユーザーならば

  • は具象クラスclazz
  • のですが、一致するユーザーがいる!= nullを
  • は、ユーザーの場合== nullの
  • 一致する電子メールを持っています3210

これは私が問題を抱えているクラスです。私は幸運なしでいくつかの発言を試みました。

答えて

1

clazzには数えてはならないサブタイプがありますか?

もしそうでなければ、clazzでクエリを作成するだけでは不十分ですか?

Criteria criteria = session.createCriteria(clazz); 
if (user == null) { 
    criteria.add(Restrictions.eq("email", email); 
} else { 
    criteria.add(Restrictions.eq("user", user); 
} 
int result = (Integer) criteria.setProjection(Projections.rowCount()).uniqueResult(); 

マッピングの外観(「電子メール」と「ユーザー」プロパティがある)を推測しています。

これが機能しない場合は、少なくともHQLでは "class"という名前の擬似プロパティがあることがわかります。多分あなたはそれを試すことができます。

+0

ああ、優秀。私は疑似財産を探して5分過ごしましたが、それを見つけることができませんでした。 Criteria APIを使用することは私のための新しい土台でした。ありがとうございました! –

0

あなたがオブジェクトのクラスをテストする場合は、次のようなものを使用することができるはず:、これはあなたのために働いていない場合は

Object entity = ... // Get the entity however 
boolean matchesClass = entity.getClass().equals(clazz); 

を、それがため、失敗したかのいくつかの例を与えますこれは簡単です!

+0

もちろんこれは一致します。しかし、私はクラスclazzのHibernateエンティティをフェッチしたいと思います。 –

0

"from " + clazz.getSimpleName() + " where ..."をお探しですか?

+0

これはうまくいくはずですが、実行時にこのタイプのクエリを作成するときにCriteria APIを使用するとうまくいくようなので、私はwaxwingの答えを好みます。しかし、お返事ありがとうございます! (私はあまりにもそれをupvotedしました。) –

+0

本当に、Criteria APIはHQLよりもこの種のクエリに適しています。 –

関連する問題