java.lang.IllegalArgumentException: Parameter value [org.hibernate.query.criteria.internal.expression.function.CurrentTimestampFunction@30cb223b] did not match expected type [java.util.Date (n/a)]
@Transactional
open fun delete(entity: E) {
val cb = em.criteriaBuilder
// create update query
val query = cb.createCriteriaUpdate(Entity::class.java)
val updateEntity = query.from(Entity::class.java)
// set update and where clause
query.set("deletedOn", cb.currentTimestamp()) // <- problem exhibited due to this line
query.where(cb.equal(updateEntity.get<Long>("id"), entity.id))
// perform update
em.createQuery(query).executeUpdate()
}
错误是由于我使用CriteriaBuilder的
currentTimestamp()
. 在冬眠的
QueryParameterBindingValidator
validate(Type paramType, Object bind, TemporalType temporalType)
有这条线
final Class parameterType = paramType.getReturnedClass();
实体的
deletedOn
Timestamp
paramType
指该字段,类型为
TimestampType
(来自冬眠)。什么时候
getReturnedClass()
被调用,它返回
java.util.Date
(我猜是因为这是基本类型?)。不幸的是,表达式中出现了类型不匹配
cb.currentTimestamp()
然后抛出错误。
我在网上找不到如何使用的工作示例
currentTimestamp()
从CriteriaBuilder来完成此任务。