当 Bean 具有带有@Formula注释的属性时,findRowCount 不起作用

2022-09-04 23:28:10

我有以下课程:

@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();
    }
}

它有场(游戏框架将自动生成 getter 和 setter)。并在子句中使用此字段。现在,如果我这样做someDatacountClientsWithDatawhere

int count = Client.countClientsWithData();

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

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

看起来像不识别注释中的加入。关于如何解决这个问题的任何想法?findRowCount@Formula

更新问题:缩小了要呼叫的问题范围。findRowCount


答案 1

因此,您希望在不使用findRowCount()方法且不获取所有数据的情况下进行计数。

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

示例

如果您的查询位于窗体上 ..

查询SELECT * FROM clients

然后,这行代码将等同于 ..Client.find.where().gt("some_data", 0).findRowCount();

计数查询SELECT COUNT(*) FROM clients WHERE some_data > 0


答案 2

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

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


推荐