3

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

私のClientエンティティには

@ManyToMany
private List<Group> groups;

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

EXISTS(SELECT g FROM Group g WHERE g MEMBER OF slr.groups AND 
             UPPER(g.description) LIKE :group)

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

public final SimplePath<java.util.List<Group>> groups = 
          createSimple("groups", java.util.List.class);

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

4

1 に答える 1

5

答えがあります。これはQueryDSL 2.2.5 で導入されたバグのようで、Eclipse で作業している場合にのみ発生します

正しい解決策は、Eclipse を使用してソースを生成しないことです (注釈処理を有効にしないでください)。代わりに、m2eclipseMaven でソースを使用および生成しています。


QClient参考までに、私の最初の回避策は、生成されたクラスを独自のクラスで拡張することでしたQQClient。これにより、1 つのメンバーが追加されます。

public final ListPath<Group, QGroup> fixedgroups = 
                  createList("groups", Group.class, QGroup.class);

その時点で、元のクエリに相当するものは次のとおりです。

QGroup g = QGroup.group;
JPQLSubQuery subquery = new JPQLSubQuery().from(g);
subquery = subquery.where(slr.fixedgroups.contains(g), 
    g.description.upper().like("%" + group.toUpperCase() + "%"));
query = query.where(subquery.exists());

(queryは、これが含まれるより大きなクエリです。は、左結合によって外側のクエリに持ち込まれたslrのインスタンスです。)QQClient

于 2011-12-23T20:50:25.547 に答える