Hibernate使用类来表示文字:
org.hibernate.jpa.criteria.expression.LiteralExpression
org.hibernate.jpa.criteria.expression.NullLiteralExpression
第一个将占位符放入查询并将UserType
应用于该值,第二个将简单地将null
放入查询中,从而忽略任何已配置的UserType
。 CriteriaUpdateImpl
如果将NullLiteralExpression
作为第二个参数传递给null
而set(Path<Y>, X)
拒绝CriteriaBuilderImpl.literal(T)
,则null
会选择UserType
。
我们使用Calendar
存储null
- 对象作为AES加密的日期字符串,并且出于兼容性原因,强制将CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaUpdate<Entity> criteriaUpdate = criteriaBuilder.createCriteriaUpdate(Entity.class);
Root<Entity> root = criteriaUpdate.from(Entity.class);
criteriaUpdate.where(criteriaBuilder.equal(root.get("id"), id));
setPathToNull((CriteriaBuilderImpl) criteriaBuilder, criteriaUpdate, root.get("value"));
Query query = entityManager.createQuery(criteriaUpdate);
LOG.info("About to perform 2. update");
LOG.info("Updated " + query.executeUpdate() + " entities");
- 值替换为0长度数据。
所以问题是,是否有任何方法只使用带有Hibernate-backend的JPA-API来归档以下内容,因为这真的很难看
private <Y> CriteriaUpdate<Entity> setPathToNull(CriteriaBuilderImpl criteriaBuilder, CriteriaUpdate<Entity> criteriaUpdate, Path<Y> value) {
return criteriaUpdate.set(value, new LiteralExpression<>(criteriaBuilder, (Y)null));
}
助手:
String
提供了一个完整的工作示例 https://github.com/TheConstructor/NullUpdate/tree/master/src/main/java/tc/vom
您可能会想出其他访问该属性的方法,但属性名称是{{1}},并且事先无法加载该实体,因为此更新是读取值错误的一部分 - 清理。如果列的名称对您有帮助,也可以使用它。