3

我在编写将在整数列上执行简单的小于或等于比较的 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:未声明的路径'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,但这是第一个障碍,我很难编写一个最简单的查询。任何帮助或建议将不胜感激。

4

1 回答 1

3

手动路径查询的工作方式如下

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

于 2012-10-31T07:11:06.410 回答