編集:問題に関係のない詳細を削除してクリーンアップします。
問題。JPA クエリは結果を返しません。
String qstr = "select o from MyStats o where o.queue_name = :queue";
String queue = "3";
em.createQuery(qstr).setParameter("queue", queue);
問題は、JPA クエリの構文が正しくないか、EmbeddedID の注釈が正しくないことにあると思いました。したがって、関連するクラスの定義を投稿しましたが、それが Oracle であることを除けば、データベース テーブルについては何も言いませんでした。
私のテストコード:DBから読み取り、最初の値を取得し、その値を後続の選択クエリで再利用して、レコードが存在することを意味します。そこにあるはずです、読んだだけですよね?
テスト
String queue = "";
String qstr1 = "select o from MyStats o";
String qstr2 = "select o from MyStats o where o.queue_name = :queue";
logger.debug("SQL query: " + qstr1);
List<MyStats> list = em.createQuery(qstr1).getResultList();
logger.debug("111 Returning results: " + list.size());
for (MyStats s : list) {
queue = s.getQueue_name();
logger.debug("Picking queue name: " + queue);
break;
}
logger.debug("SQL query: " + qstr2);
list = em.createQuery(qstr2).setParameter("queue", queue).getResultList();
logger.debug("222 Returning results: " + list.size());
出力:
SQL query: select o from MyStats o
111 Returning results: 166
Picking queue name: 3
SQL query: select o from MyStats o where o.rec_id.queue_name = :queue
222 Returning results: 0
クラス定義
@Entity
public class MyStats {
private String queue_name;
private long stats_id;
... //getters and setters
}
WHERE 句のないクエリは、MyStats クラスのメンバーを含むクエリとして正しく機能します。
em.createQuery("select o from MyStats o where o.stats_id = :sid").setParameter("sid", 179046583493L);
Oracle 10データベース、Java EE 5 SDK、Glassfish 2.1を使用しています。