Java 用于多任务的QueryDSL代码生成
我正在将一些复杂的JPQL查询移植到一个大型Hibernate/JPA2应用程序中,以使用QueryDSL 2.3.0,我一直在做一个 我的Java 用于多任务的QueryDSL代码生成,java,hibernate,jpa,querydsl,Java,Hibernate,Jpa,Querydsl,我正在将一些复杂的JPQL查询移植到一个大型Hibernate/JPA2应用程序中,以使用QueryDSL 2.3.0,我一直在做一个 我的客户端实体包含 @ManyToMany private List<Group> groups; QueryDSL代码生成在myQClient类中生成了以下代码: public final SimplePath<java.util.List<Group>> groups = createSimple(
客户端
实体包含
@ManyToMany
private List<Group> groups;
QueryDSL代码生成在myQClient
类中生成了以下代码:
public final SimplePath<java.util.List<Group>> groups =
createSimple("groups", java.util.List.class);
public final SimplePath组=
createSimple(“groups”,java.util.List.class);
使用
SimplePath
生成的代码不允许我使用中的或包含的方法来查询成员资格。我想我需要一个CollectionPath
。是否有方法注释客户机
类,以便QueryDSL使用正确的类型查询集合 我有一个答案。这看起来像
正确的解决方案是不使用Eclipse生成源代码(不要启用注释处理)。相反,我使用的是m2eclipse
,并在Maven中生成源代码
作为参考,我的第一个解决方法是使用我自己的QQClient
类扩展生成的QClient
类,它添加了一个成员:
public final ListPath<Group, QGroup> fixedgroups =
createList("groups", Group.class, QGroup.class);
(query
是其中较大的查询。slr
是由左连接引入外部查询的qqqclient
的一个实例。)可能是这个问题:我在尝试QueryDSL时一直在使用Eclipse,计划一旦习惯了这个工具,就转移到Maven。在发现这个可能的bug之后,我将尝试使用Maven来处理构建。我们将在假期后修复这个bug。在Eclipse中使用2.2.4版本的one jar和在Maven中使用更新版本的one jar可能是一种替代的临时修复方法。谢谢-我在问题的前一天才开始使用QueryDSL,所以bug不是我的第一个想法。切换到QueryDSL极大地提高了查询代码的可读性
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());