【问题标题】:Cannot perform operation ".isEmpty" on org.datanucleus.store.rdbms.sql.expression.SubqueryExpression无法对 org.datanucleus.store.rdbms.sql.expression.SubqueryExpression 执行操作“.isEmpty”
【发布时间】:2017-06-07 09:35:54
【问题描述】:

我有一个如下所示的子查询: (由于性能问题,它是从包含重写的)

...(从 RecoLock lock 中选择 mpiSubscriptionId == this.mpiSubscriptionId).isEmpty())

datanucleus 给了我一个


无法对 org.datanucleus.store.rdbms.sql.expression.SubqueryExpression 执行操作“.isEmpty”


但在 datanucleus documentation 中有一些类似代码运行良好的示例。我做错了什么?

datanucleus 版本为 4.1.0

【问题讨论】:

  • 从 javadoc 来看,SubqueryExpression 类中没有 isEmpty() 方法。你用的是什么例子?
  • @AlexFerretti here datanucleus.org/products/datanucleus/jdo/query.html in "Using methods on the subquery" 是一个例子
  • 检查您的导入。检查那是不是正确的isEmpty()
  • 您参考了 DataNucleus v5.0 的文档,但说您使用的是 4.1.0。也许这就是原因?所有版本都有文档,我认为该文档总是指该分支上的最新版本。由于您使用的是 4.1.0,因此您甚至离该分支的最新版本还差得远,更不用说 5.0
  • @Neil Stockton 好点,谢谢,我会努力更新的

标签: java jdo datanucleus


【解决方案1】:

从我看到的对{subquery}.isEmpty() 的 DataNucleus JDOQL 支持来看,这仅从 v5.0 开始受支持。

如果使用 v4.x(或更早版本),您可以将查询转换为做

... (select COUNT(lock) from RecoLock lock where mpiSubscriptionId == this.mpiSubscriptionId) == 0)

应该等同于“size == 0”(即“empty”)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-24
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    相关资源
    最近更新 更多