私は次の行を実行しています:
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
何がそれを引き起こす可能性がありますか?そして、それが初めてどのように機能するか、しかし、それ以外のすべてのインスタンスでは機能しませんか?
おかげで、
レイ。
通常、エラーメッセージは、クエリが結果を返さなかったことを示します。したがって、getSingleResult()
は失敗します。
空のクエリ結果が予想される場合は、getResultList()
の使用を検討し、isEmpty()
で結果をテストします。
T03CallsLog newCall = null;
List results = q1.getResultList();
if (!results.isEmpty())
newCall = (T03CallsLog) results.get(0);
else
// is it a problem? -> log.
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;