問題タブ [querydsl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
19953 参照

java - QueryDSL での CollectionExpression の使用

QueryDSL ライブラリのcom.mysema.query.types.expr.SimpleExpression<T>クラスにはSimpleExpression.in(CollectionExpression<?, ? extends T>)、コレクションを返す式を受け取るメソッドがあります。しかし、タイプ のオブジェクトを作成する方法が見つかりませんcom.mysema.query.types.CollectionExpression<?, ? extends T>

私のクエリ式は次のようになります。

私はのexpressionようなものにしたい場所:

しかし、2 番目の式は型com.mysema.query.types.expr.BooleanExpressionであり、それを に変換する方法を見つけることができませんcom.mysema.query.types.CollectionExpression<?, ? extends T>

QueryDSL API ドキュメントを調べましたが、関連するものが見つかりませんでした。

0 投票する
4 に答える
27199 参照

java - Querydsl、jOOQ、JEQUEL、activejdbc、iciql、およびその他のクエリDSLの比較

Querydsl 、jOOQJEQUELactivejdbciciqlなど、Javaで使用できるさまざまなQueryDSLライブラリ間のパフォーマンス比較に関するリソースを教えてもらえますか。

背景: Spring JDBCテンプレートを使用していますが、それでもクエリをプレーンな文字列形式で記述する必要がありました。直接クエリの記述に問題はありませんが、DBテーブル名に直接依存しているのではないかと心配しています。HibernateやJPA/EclipseLinkのようなORMフレームワークは使いたくありません。可能な限り高い生のパフォーマンスが必要です(IMO、CRUD中心のアプリケーションに適しています)。これらのDSLのオーバーヘッドは、それが少しの場合にのみ余裕があります(ほとんどの場合、StringBuilder / Stringの連結になると思います!)

一部のxmlで外部化された名前付きクエリの使用を検討しました。しかし、さまざまなクエリDSLライブラリが提供する価値を評価しようとしているだけです。

編集:私の要件の詳細: APIメソッドを使用して適度に複雑なクエリを構築する場合のこれらのパフォーマンスの比較を知りたいです。必要なのは、これらのクエリDSLライブラリのいずれかを使用してクエリ文字列を生成し、それをSpringJDBCテンプレートに渡すことだけです。したがって、この中間ステップを追加するとパフォーマンスが大幅に低下するかどうかを知りたいので、名前付きクエリを使用するか、StingBuilderまたは同様のアプローチを使用する独自のライブラリを構築します。

jOOQ、iciql、QueryDSLでの私の経験を更新してください:

元の投稿でこれについて言及しなかったものの、エンティティクラスで必要な使いやすさとオーバーヘッド(追加のアノテーションや実装が必要な場合など)にも熱心です。

jOOQ:

  • エンティティのプロパティをライブラリ固有の方法に変更する必要があります
  • SQLクエリ文字列を返すことができます

Iciql:

  • エンティティは変更なしまたはほとんど変更なしでマッピングできます(合計3つの方法を使用してマッピングできます)
  • ただし、クエリの選択のみに制限されます(更新/削除/ ...の場合は、エンティティを再度変更する必要があります)

QueryDSL:

  • エンティティをテーブルにバインドする複数の方法(ライブラリ固有の方法以外で、JPAアノテーションの使用がサポートされています)。しかし、少なくともエンティティを変更する必要があります
  • クエリ文字列を取得する簡単な/直接的な方法はありません

(すべての観察結果は、私がこれらについて知っている知識がほとんどありません。これらのいずれかが正しくない場合は、修正してください)

上記のすべてで、私は名前付きクエリを書くことに固執しています:(しかし、Lukas Ederの回答は私の元の投稿の懸念(パフォーマンス)について説明しているようですので、私は彼を受け入れました。

0 投票する
2 に答える
5779 参照

jpa - QueryDSL: リレーションとプロパティのクエリ

JPAでQueryDSLを使用しています。

エンティティのいくつかのプロパティをクエリしたいのですが、次のようになります。

それは正常に動作します。

投稿のコメントなど、リレーション プロパティをクエリする場合:

それも結構です。

しかし、関係と単純なプロパティを一緒にクエリしたい場合、たとえば

その後、何かがうまくいかず、不適切な SQL 構文が生成されました。

その後、1 つの SQL ステートメントでそれらをまとめてクエリすることはできないことに気付きました。

QueryDSL がどうにかして関係を処理し、追加のクエリを生成して (休止状態が遅延関係で行うのと同じように)、結果をロードすることは可能ですか?

それとも、2 回クエリを実行してから、両方の結果リストをマージする必要がありますか?

PS私が実際に欲しいのは、コメントのIDを持つ各投稿です。各投稿のコメント ID を連結する関数の方が優れているのですが、この種の表現は可能ですか?

次のようなサブクエリSQLを生成します(select group_concat(c.id) from comments as c inner join post where c.id = post.id)

0 投票する
4 に答える
1580 参照

playframework - QueryDSLとPlayFramework

私はしばらくの間JPA2でQueryDSLを使用していますが、これは私が知っているORMの最も強力な組み合わせです。JPACriteriaAPIは災害です。QueryDSLでは、JPQLについても忘れてしまいました。

PlayでQueryDSLを使いたい!文字列としてのJPQLのインライン部分を除いて、Playではすべてが非常によく見えます。それは私にCakePHPを思い出させます...

Play(および他のいくつかのもの:))にリファクタリング防止のクエリ言語が必要です。

QueryDSLの使用法は簡単です。EntityManagerのみが必要です。ただし、QueryDSLにはこのAPTクラスジェネレーターがあります(Hibernate for citeria APIのものと同じです)。

誰かがこのクラスジェネレータをPlayで動作させることができましたか?それらのクラスを再作成してホットリロードすることは可能ですか?

0 投票する
2 に答える
9210 参照

java - QueryDSLで定数数値式を作成するには?

QueryDSL でこのようなクエリを作成したい

私はこのようにしてみました

しかし、これは機能しません。式には減算メソッドがありません。

私はこのようにしました:

しかし、最初の方法でそれを行う方法を知りたいです。

//編集

2番目の方法は機能しません:

JPAUpdateClause.toString 言います:

しかし、SQLの結果は

括弧が消えただけです。私は何か間違ったことをしていますか?次のようになります。

同じ結果になります。

上記の問題に対して

動作します。しかし、バグがあると思います。

0 投票する
2 に答える
473 参照

jpa - QueryDsl Intellisense / Netbeans の問題

ライブラリの all ディレクトリからすべての QueryDSL jar を参照しています。私の問題 NetBeans が「Q」オブジェクトを認識していません。これらは、「_」が付いた他のすべての JPA エンティティ オブジェクトと同じディレクトリに生成されます。次に、「Q」オブジェクトを使用するとコンパイルされますが、エディター自体はそれを認識せず、エラーと見なします。

誰にもアイデアはありますか?Antファイルを編集しようとしましたが、それも失敗しました。生成のために特別に編集する必要はないようです。主な問題は、NetBeans エディタへのリンクにあるようです。

ところで、私はこのリンクを見ましたが、すでにこれを行っています! Netbeans でクラスパスを設定するには?

また、Mac OSX と Ubuntu Netbeans の両方でこの問題が発生します。助けていただければ幸いです!!

0 投票する
3 に答える
8023 参照

java - spring-data-jpaおよびquerydslでのMavenビルドの問題

spring-data-jpaおよびQueryDsl用のEclipseMavenプロジェクトがあります。

maven-apt-pluginに問題があるようです。mvncleanに続いてmvninstallを実行すると、QueryDslで生成されたファイルを参照するファイルを「処理」しようとしますが、これらの生成されたファイルはまだビルドされていません。 「シンボルが見つかりません」というエラーが複数発生します。

その後、別のmvnインストールを実行する必要がある場合は、生成されたファイルが存在するため、すべて問題ありません。

このmaven-apt-pluginはプロジェクト内のすべてのファイルを処理する必要がありますか、それとも指定されたディレクトリを指定できますか?

注:JDK6、Eclipse Indigo、M2E1.0.100を使用しています

私のPOMは次のとおりです。

0 投票する
1 に答える
1384 参照

java - QueryDSL 出力用のパッケージのカスタマイズ

Maven を使用して MongoDB 用の QueryDSL オブジェクトを作成しています。ビルド xml は次のとおりです。

ただし、 と同じパッケージでのクエリ クラスQDomainを生成します。DomainDomain

プラグインをカスタマイズしてクエリ クラスを別のパッケージに入れることはできますか?

0 投票する
1 に答える
2652 参照

java - ManyToManyのQueryDSLコード生成

いくつかの複雑なJPQLクエリを大規模なHibernate/JPA2アプリケーションに移植して、QueryDSL 2.3.0を使用していますが、1つに固執しています。

私のClientエンティティには

私の既存のクエリフラグメントは

QueryDSLコード生成により、私のQClientクラスで次のように生成されました。

を使用したコード生成では、またはメソッドを使用してメンバーシップを照会SimplePathできません。代わりに必要だと思います。QueryDSLがコレクションのクエリに正しいタイプを使用するようにクラスに注釈を付ける方法はありますか?incontainsCollectionPathClient

0 投票する
3 に答える
8950 参照

java - Hibernate単一テーブル継承の識別子列を削除できますか?

アプリケーションのすべてのテーブルに単一テーブル継承を使用します。これにより、同じアプリケーションスタックの異なるインスタンスが同じDAOで動作できるようになりますが、エンティティはわずかに異なる可能性があり、そのインスタンスに固有の情報が含まれている可能性があります。抽象クラスは基本的なテーブル構造を定義し、拡張機能はそのインスタンスで必要な場合は追加の列を定義します。

アプリケーションA:

アプリケーションB:

これで、DAOはClientアプリケーションAおよびBのオブジェクトを操作できますが、アプリケーションBは、アプリケーションBに固有のマネージャーメソッドによって読み取られる可能性のあるクライアントオブジェクトの追加情報を定義できます。

アプリケーションA:

アプリケーションB:

残念ながら、これはすべてのテーブル(または私が選択する可能性のある他の名前)にDTYPE列があることを意味します。これを取り除く方法はありますか?私たちはそれを必要とせず、それはDBスペースを使い果たしています...

ありがとう!


編集

注意すべき重要な点:機能し@MappedSuperclassません。HQL抽象化レイヤーとしてQueryDSLを使用しています。これには、タイプ保存クエリ用に自動的に生成されたクエリタイプクラスが必要です。ただし、これらは、抽象クラスに。の注釈が付けられている場合にのみ正しく生成され@Entityます。

アプリケーションAとアプリケーションBClientで実際にクエリを実行しているときに、抽象クラスに対してクエリを実行する必要があるため、これは必要です。ClientSimpleClientAdvanced

したがって、どのアプリケーションでもこれは機能します。

アプリケーションBでは、これは機能します。


EDIT2-ボイルダウン

つまり、デプロイ時にHibernateを構成して、継承されたエンティティのディスクリミネータータイプを固定値に設定できますか?それで、私の例では、aClientは常にClientSimple一方のアプリケーションともう一方のアプリケーションClientAdvancedにあるので、その情報をデータベースに保存する必要はありませんか?

私が言ったように:各アプリケーションはベースアプリケーションスタックのインスタンスになります。各アプリケーションはローカルデータベースに追加の列を定義する場合がありますが、すべてのオブジェクトはそのインスタンスに対して同じタイプになるため、ディスクリミネーターが常に同じであり、データベース内で冗長になり、休止状態の構成のユースケースになることが保証されます。