Adr*_*Cox 3 java hibernate jpa querydsl
我在一个大的Hibernate/JPA2应用程序中移植了一些复杂的JPQL查询以使用QueryDSL 2.3.0,而我却陷入其中.
我的Client实体包含
@ManyToMany
private List<Group> groups;
Run Code Online (Sandbox Code Playgroud)
我现有的查询片段是
EXISTS(SELECT g FROM Group g WHERE g MEMBER OF slr.groups AND
UPPER(g.description) LIKE :group)
Run Code Online (Sandbox Code Playgroud)
QueryDSL代码生成在我的QClient类中产生了以下内容:
public final SimplePath<java.util.List<Group>> groups =
createSimple("groups", java.util.List.class);
Run Code Online (Sandbox Code Playgroud)
使用代码生成SimplePath不允许我使用in或contains方法来查询成员资格.我想我需要一个CollectionPath代替.有没有办法注释Client类,以便QueryDSL使用正确的类型来查询集合?
我有一个答案.这看起来像是在QueryDSL 2.2.5中引入的一个错误,只有在Eclipse中工作时才会发生.
正确的解决方案是不使用Eclipse来生成源(不要启用注释处理).相反,我正在m2eclipseMaven中使用并生成源代码.
作为参考,我的第一个解决方法是QClient使用我自己的QQClient类扩展生成的类,这会添加一个成员:
public final ListPath<Group, QGroup> fixedgroups =
createList("groups", Group.class, QGroup.class);
Run Code Online (Sandbox Code Playgroud)
那时相当于我的原始查询是:
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());
Run Code Online (Sandbox Code Playgroud)
(query这是更大的查询.slr是QQClient左连接引入外部查询的实例.)
| 归档时间: |
|
| 查看次数: |
2533 次 |
| 最近记录: |