小弟在学习使用 beetlsql,当使用 lambdaQuery 的时候会发生报错,代码如下:
val sqlManager = getSQLManager()
//初始化数据脚本,执行后,内存数据库将有一个 sys_user 表和模拟数据
DBInitHelper.executeSqlScript(sqlManager, "db/schema.sql")
val query = sqlManager.lambdaQuery(UserEntity::class.java)
val entities = query.andEq(UserEntity::departmentId, 1)
.andIsNotNull(UserEntity::name).select()
/*上述代码对应的 java 代码如下:
LambdaQuery<UserEntity> query = sqlManager.lambdaQuery(UserEntity.class);
List<UserEntity> entities = query.andEq(UserEntity::getDepartmentId,1)
.andIsNotNull(UserEntity::getName).select();
*/
执行的时候会得到如下错误:
Exception in thread "main" java.lang.RuntimeException: java.lang.NoSuchMethodException: MainKt$sam$org_beetl_sql_core_query_LambdaQuery_Property$0.writeReplace()
at org.beetl.sql.core.query.LambdaQuery.getFunctionName(LambdaQuery.java:269)
at org.beetl.sql.core.query.LambdaQuery.andEq(LambdaQuery.java:46)
at MainKt.main(main.kt:22)
at MainKt.main(main.kt)
Caused by: java.lang.NoSuchMethodException: MainKt$sam$org_beetl_sql_core_query_LambdaQuery_Property$0.writeReplace()
at java.lang.Class.getDeclaredMethod(Class.java:2130)
at org.beetl.sql.core.query.LambdaQuery.getFunctionName(LambdaQuery.java:255)
... 3 more
JDK 使用 1.8 版本。请教大家这里该如何改写呢,非常感谢
1
chendy 2021-09-07 15:42:31 +08:00
beetlsql 的这个机制应该是用 serializedlambda 实现的,但是目测 kotlin 的实现方式是匿名内部类,于是无解,换 java 写吧
参考这里: https://discuss.kotlinlang.org/t/how-to-create-a-serializedlambda/8502/4 |
2
cs419 2021-09-07 16:28:18 +08:00
没用过 beetlsql
用过 mybatis plus 的 lambda query 不兼容 kotlin 但是针对 kotlin 有另外的实现类 你可以给 beetlsql 提建议 让他们加个实现 |
3
Kimen 2021-09-07 17:22:49 +08:00
类名::属性就是调用类的静态方法,可以直接 UserEntity.Companion.getName()
|
4
aguesuka 2021-09-07 18:16:41 +08:00
@Kimen 估计没用, 从 java 的 Method References 是用的 SerializedLambda 的 hack. kotlin 的语法应该没法创建它的实例
|
5
iseki 2021-09-08 00:18:27 +08:00
Kotlin 需要库进行额外处理,你用的这个看上去不支持,建议翻翻文档,有些会针对 Kotlin 提供额外的扩展包
|
6
cylee 2021-09-08 18:29:11 +08:00
有移动端同学吗?头条商业化招 Android iOS : //https://www.v2ex.com/t/798022//
|