我在编写JPAQuery时遇到问题,该JPAQuery将在整数列上执行小于或等于比较的简单。我有QCommand生成的querydsl对象,我试图与JPAquery一起使用来执行这个非常简单的查询。我想要执行的查询使用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:Undeclared path'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很好地合作,但这是第一个障碍,我很难写出一个最简单的查询。任何帮助或建议将不胜感激。
答案 0 :(得分:2)
带有手动路径的查询就像这样
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类如何?代码生成可能存在一些问题。