3

整数列で単純な以下の比較を実行するJPAQueryを作成するのに問題があります。この非常に単純なクエリを実行するためにJPAqueryで使用しようとしているQCommandで生成されたquerydslオブジェクトがあります。実行したいクエリは、SQLを使用すると次のようになります。

select * from command where retry_count <= 10;

生成されたQCommandオブジェクトは、retryCountパラメーターを次のように定義します。

public final SimplePath<Integer> retryCount = createSimple("retryCount", Integer.class);

SimplePathであるため、JPAQueryを書き込もうとすると、retryCount変数にloeやgoeなどの比較演算子がないことに気付きました。その列/変数では、isNull、isNotNull、eq、およびその他の非常に単純な演算子のみを実行できますが、比較演算子は実行できません。これは以下のようになりますが、明らかに私が望む比較を実行しませんが、エラーなしで機能します:

JPAQuery query = new JPAQuery(entityManager);
query.from(command).where(command.retryCount.isNotNull()).list(command);  

周りを見回すと、NumberPathを作成する方法があることがわかりました。これは私が望むもののようですが、以下のコードを実行しようとすると、例外 "java.lang.IllegalArgumentException:Undeclaredpath'retryCount'が発生します。このパスを追加してくださいクエリを参照できるようにするためのソースとして。」

JPAQuery query = new JPAQuery(entityManager);
NumberPath<Integer> retryCount = new NumberPath<Integer>(Integer.class, "retryCount");
return query.from(command).where(retryCount.loe(10)).list(command);

したがって、このパスをソースに「追加」するにはどうすればよいですか。私は周りを見回しましたが、これを行う例も、これがどのように行われるべきかについての説明も見つかりません。この状況では、javadocsはあまり役に立ちません。私はquerydslをうまく進めていましたが、これが最初の障害であり、最も単純なクエリの1つを書くことに困惑しています。任意の支援やアドバイスをいただければ幸いです。

4

1 に答える 1

3

手動パスを使用したクエリは次のように機能します

JPAQuery query = new JPAQuery(entityManager);
NumberPath<Integer> retryCount = new NumberPath<Integer>(Integer.class, command, "retryCount");
return query.from(command).where(retryCount.loe(10)).list(command);

違いは、retryCountパスをトップレベルのパスとして作成するのに対し、親を持つプロパティパスとして作成する必要があることです。

Commandクラスはどのように見えますか?コード生成に問題がある可能性があります。

于 2012-10-31T07:11:06.410 に答える