Sup*_*shi 3 hibernate criteria-api kotlin
我遇到了无法解决的非常烦人的问题,我想我错过了一些非常直接的东西,因为我已经有了 Java 中的工作代码。
基本上我所拥有的是这样的:
class ConfigurationSpecification(
private var list: MutableList<SearchCriteria> = mutableListOf()
) : Specification<Configuration> {
override fun toPredicate(root: Root<Configuration>, query: CriteriaQuery<*>, builder: CriteriaBuilder): Predicate? {
val predicates: MutableList<Predicate> = mutableListOf()
for (criteria in list) {
if (criteria.operation == "EQUALS") {
predicates.add(builder.equal(root.get(criteria.key), criteria.value)) <- NOT WORKING root.get(criteria.key) this is making issue
}
}
return builder.and(predicates[0])
}
}
Run Code Online (Sandbox Code Playgroud)
代码真的很简单,但由于某种原因 Kotlin 抱怨它,我得到的错误是这样的:
错误:(19, 51) Kotlin:类型推断失败:没有足够的信息来推断 fun get(p0: String!): 中的参数 Y:路径!请明确指定。
这是工作的java代码:
predicates.add(builder.equal(root.get(criteria.getKey()), criteria.getValue())); <- working with Java
Run Code Online (Sandbox Code Playgroud)
任何有经验的 Kotlin 人知道这个错误的解决方法吗?我见过其他一些人有类似的问题,但我无法根据我看到的答案解决这个问题。
从文档:
< Y> Path< Y> get(String attributeName)
创建与引用属性对应的路径。
注意:使用基于字符串的 API 的应用程序可能需要指定 get 操作产生的类型,以避免使用 Path 变量。
要修复您的错误,您需要明确指定泛型类型,因为 Kotlin 编译器无法从上下文中推断出它:
predicates.add(builder.equal(root.get</* type of criteria.value */>(criteria.key), criteria.value))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
778 次 |
最近记录: |