Querydsl需要查询整数列小于值的位置

时间:2012-10-30 16:51:33

标签: java querydsl

我在编写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很好地合作,但这是第一个障碍,我很难写出一个最简单的查询。任何帮助或建议将不胜感激。

1 个答案:

答案 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类如何?代码生成可能存在一些问题。

相关问题