【问题标题】:findRowCount doesn't work when bean has property with @Formula annotation当 bean 具有带有 @Formula 注释的属性时,findRowCount 不起作用
【发布时间】:2012-09-14 09:02:07
【问题描述】:

我有以下课程:

@Entity
@Table(name = "clients")
public class Client extends Model {
    @Id
    public int id;

    @Formula(select = "inv.some_data", 
            join = "left join (select 1 as some_data) as inv")
    public int someData;

    public static Finder<String, Client> find = 
        new Finder<String, Client>(String.class, Client.class);

    public static int countClientsWithData() {
        return Client.find.where().gt("someData", 0).findRowCount();
    }
}

它有someData 字段(play 框架会自动生成getter 和setter)。而且countClientsWithDatawhere 子句中使用了这个字段。现在如果我这样做了

int count = Client.countClientsWithData();

它会在尝试执行查询时抛出NullPointerException

select count(*) from clients t0 where inv.some_data > ?

看起来 findRowCount 无法识别 @Formula 注释中的连接。有关如何解决此问题的任何想法?

更新问题:将问题缩小到findRowCount 通话。

【问题讨论】:

  • 这是一个错误。暂时使用 zaffargachal 所说的话。
  • 不是你的问题的答案,只是我的看法,但如果你真的想使用 SQL,那么你应该使用 iBatis/MyBatis。如果你想使用 JPA,那么使用 JPA 并避免 SQL,避免 SQL,避免 SQL。

标签: java database orm playframework-2.0 ebean


【解决方案1】:

所以你想要计数而不使用 findRowCount() 方法并且不获取所有数据..

解决方案:复制相同的查询,并将其放在select count(*) from .. 的表单上,并使用它来查找计数

示例

如果您的查询是在表单上 ..

查询SELECT * FROM clients

那么这行代码Client.find.where().gt("some_data", 0).findRowCount(); 将等价于..

计数查询SELECT COUNT(*) FROM clients WHERE some_data &gt; 0

【讨论】:

    【解决方案2】:

    一种可能的方法是使用 findlist() 方法并使用它的 size() 方法来获取行数而不是 findRowCount() 方法

    return Client.find.where().gt("totalOrdersAmount", 0).findList().size();

    【讨论】:

    • 这是否意味着它将从数据库中获取整个表?
    • 是的,它将加载 Java 堆中的所有内容:-(
    • 否,应用聚合函数后会按行分组
    【解决方案3】:

    您应该对此进行调试,看看您缺少什么。它要么是所描述的错误,要么您根本没有引用您认为的内容。虽然我们都去过那里,但是如果您可以在该行断点并查看您的对象,只需确保一切都是您期望的样子。一旦您添加尝试处理数据库字段并引用它们,例如拼写错误就会引起很多麻烦。

    【讨论】:

    • 是的,其他一切都按预期工作,因为 zaffargachal 的答案有效(除了它获取整个表格)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 2022-08-06
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    相关资源
    最近更新 更多