web-dev-qa-db-ja.com

クエリ例外のエンティティが見つかりません

私は次の行を実行しています:

  String queString = "some query string"
  Query q1 = em.createNativeQuery(queString, T03CallsLog.class);
  T03CallsLog newCall;
  newCall = (T03CallsLog) q1.getSingleResult(); //this line cause the exception after         the first time

奇妙な状況。 1つのインスタンスでのみ実行するとうまくいきますが、複数のインスタンス(mdb)と並行して実行すると、最初のインスタンスが例外なしで実行され、残りはすべてこのエラーが発生します:

10:04:50,750 ERROR [log] ECMSDispatcherMdb.onMessage, error: No entity found for query

何がそれを引き起こす可能性がありますか?そして、それが初めてどのように機能するか、しかし、それ以外のすべてのインスタンスでは機能しませんか?

おかげで、

レイ。

23
rayman

通常、エラーメッセージは、クエリが結果を返さなかったことを示します。したがって、getSingleResult()は失敗します。

空のクエリ結果が予想される場合は、getResultList()の使用を検討し、isEmpty()で結果をテストします。

T03CallsLog newCall = null;
List results = q1.getResultList();
if (!results.isEmpty())
   newCall = (T03CallsLog) results.get(0);
else
   // is it a problem? -> log.
53
Andreas_D

Hibernate

Hibernateのより具体的なentityManagerはHibernateEntityManagerです。あなたの代わりに

@PersistenceContext
public final EntityManager em = null;

より具体的に使用する

@PersistenceContext
public final HibernateEntityManager em = null;

その後、使用することができます

String queString = "some query string"
Iterator<T03CallsLog> q1 = em.createNativeQuery(queString, T03CallsLog.class).iterate();
T03CallsLog newCall = q1.hasNext() ? q1.next() : null;
0
Peter Rader