当我在 JDO/DataNucleus 中为聚合函数调用 setResultClass(...) 时,抛出 JDOUserException

发布于 2024-10-02 21:39:31 字数 646 浏览 5 评论 0原文

使用以下代码

    Query query = pm.newQuery(User.class);
    query.setFilter( "username == :usernameParam" );
    query.setResult( "count(username)" );
    query.setResultClass(Long.class);
    Object result = query.execute(username);
    return (result!=null && (Long)result>0);

我得到这个异常:

javax.jdo.JDOUserException:查询 将返回单个字段,但它是 与 ResultClass (java.lang.Long) :它是 java.lang.Long

如果我删除 .setResult(Long.class) 查询,它会起作用并返回一个 Long。

也许我不理解 setResult() 方法。我知道我需要设置它来指示我想要什么类型的结果。但 count() 这样的聚合函数不就是这种情况吗?

With the following code

    Query query = pm.newQuery(User.class);
    query.setFilter( "username == :usernameParam" );
    query.setResult( "count(username)" );
    query.setResultClass(Long.class);
    Object result = query.execute(username);
    return (result!=null && (Long)result>0);

I get this exception:

javax.jdo.JDOUserException: The Query
will return a single field but it is
not of a consistent type as the
ResultClass (java.lang.Long) : It is
java.lang.Long

If I remove the .setResult(Long.class) query it works and I get back a Long.

Perhaps I don't understand the setResult() method. I had understood that I need to set this to indicate what type of result I wanted. But is this not the case with aggregate functions such as count()?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏雨凉 2024-10-09 21:39:31

这是几天前修复的。幸运的是,2.1.3 和 2.2 M3 版本已在一小时左右发布;-)

That was fixed several days ago. Fortunately for you versions 2.1.3 and 2.2 M3 were released an hour or so ago ;-)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文