Db.findFirst方法的问题

当前JFinal版本:4.9.05

问题详述:

    Db.findFirst看方法的定义应该返回Record,但是实际返回Object,抛出了java.lang.ClassCastException。

    [Ljava.lang.Object; cannot be cast to com.jfinal.plugin.activerecord.Record


@Override
public Optional<Record> login(String username,String password) {
    Record query = Db.findFirst("select * from org_user where NAME=? and PASSWORD=?", Optional.ofNullable(username).orElse(""), Optional.ofNullable(password).orElse(""));
    return Optional.ofNullable(query);
}


Db.findFirst方法抛出此异常。并且无法进入Db.class的此方法。

public static Record findFirst(String sql, Object... paras) {
    return MAIN.findFirst(sql, paras);
}

还有就是,可以考虑像Stream一样扩充一个FIndAny方法提高查询效率

评论区

steven_lhcb_9527

2021-01-06 10:56

解决了,不知道编译器(IDEA)出什么问题。我把Db.findFirst这行代码的返回值重新拼了下,然后再复制到方法的返回值上就好了。

JFinal

2021-01-06 11:42

jfinal 的 active record 模块是 10 年前设计的,当时还没有 JDK 8 ,所以也就没用上 Stream 这样的设计,因为当时还不支持

后来用户量大了,也不方便改,目前只有新加的功能有类似的设计,例如 template 方法与 each 方法:
Db.template(...).find();
Db.template(...)each( lambda );