2016-12-16 5 views
0

こんにちは誰も私はこのJavaクエリが失敗している理由を教えてくれますか?このJavaクエリが失敗するのはなぜですか?結果があるとき0を返す

Query q = entityManager.createNativeQuery("SELECT m.* FROM MdmAudit m WHERE m.correlationID = :correlationId AND m.verb = :verb", MdmAuditDAO.class); 
      //Query q = entityManager.createNamedQuery("MdmAuditDAO.GetData"); 
      q.setParameter("correlationId", resp.getHeader().getCorrelationID()); 
      q.setParameter("verb", resp.getHeader().getVerb()); 

      long result = (long) q.getFirstResult(); 

namedQuery:

@NamedQuery(name="MdmAuditDAO.GetData", query="SELECT m FROM MdmAuditDAO m WHERE m.correlationId = :correlationId AND m.verb = :verb") 
public class MdmAuditDAO implements Serializable { 

私は私のMdmAuditDAOクラスのゲッターとセッターを持っている、と私は、変数の命名をチェックして、彼らはNamedQueryのように同じなので、問題はありませんそこにはない。

私の問題は、データベースに3つのエントリがあり、少なくとも1つの回答を返さなければならないということですが、私の結果は0になります。

MdmAuditDAOは、私のpersistence.xmlとmy ehcache.xmlで定義されています。だから私は返される結果が0であるのはなぜですか?私はまた、返されたオブジェクトまたはオブジェクトのリストを取得しようとしました。同じ結果ですが、何も返されませんが、mssqlデータベースでクエリを実行すると、結果は下の図のようになります。それはm.*とは関係がありません。私はSELECT文でそれを使用すると結果が得られます。 enter image description here

EDIT 1:これは私が私の休止状態ログから得るものである、と私はこれを読んする方法がわかりませんか?

Hibernate: 
    select 
     mdmauditda0_.id as id1_7_, 
     mdmauditda0_.correlationID as correlat2_7_, 
     mdmauditda0_.messageID as messageI3_7_, 
     mdmauditda0_.meter_no as meter_no4_7_, 
     mdmauditda0_.noun as noun5_7_, 
     mdmauditda0_.payload as payload6_7_, 
     mdmauditda0_.source as source7_7_, 
     mdmauditda0_.subtype as subtype8_7_, 
     mdmauditda0_.time as time9_7_, 
     mdmauditda0_.verb as verb10_7_ 
    from 
     MdmAudit mdmauditda0_ 
    where 
     mdmauditda0_.correlationID=? 

詳細情報を入手するには設定する必要がありますか?私は次のジャーを使用しています enter image description here

そして私のJavaのバージョンは1.7.0_79です。

+0

両方のクエリが0を返しますか? –

+0

@Khalil Mはい両方のクエリは0を返し、なぜ私は考えられないのですか? – TheLearner

+1

''私はwhere句で2つの引数を持つ理由を理解できませんが、hibernate log.'2.'からの1つの条件だけがwhere句からすべての引数を削除し、結果を確認します。 '3.' resp.getHeader()。getCorrelationID()の値をチェックします。 '4.'データベース接続を確認してください。別のデータベースに接続している可能性があります。 – degr

答えて

1

Iは、最初の要素の位置を返すhttp://www.objectdb.com/api/java/jpa/Query/getFirstResult解決策を見つけたが、setFirstResultメソッドは、クエリオブジェクトに適用されなかった場合、私は、ビット

戻り0語句で混乱しました。

私の頭の中でそれを知ることはできませんでした。

私のソリューションは、今、私はちょうどオブジェクト

Query q = entityManager.createNativeQuery("SELECT m.* FROM MdmAudit m WHERE m.correlationId = :correlationId AND verb = :verb", MdmAuditDAO.class); 
      //Query q = entityManager.createNamedQuery("MdmAuditDAO.GetData"); 
      q.setParameter("correlationId", resp.getHeader().getCorrelationID()); 
      q.setParameter("verb", resp.getHeader().getVerb()); 
      List<MdmAuditDAO> mdmAuditList = q.getResultList(); 

のリストを返す。そして、それは正常に動作し、私は結果を得ることです。だから、result == 0の代わりに私のコードで私はちょうどNULL and isEmpty()のチェックをしています。

サイドノート:エントリを削除してから、結果がq.getFirstResult()コールで表示されないようにしましたが、それは可能性があります。返されたものを確認してから、その値を確認してください。

関連する問題