mysql - Hibernate 不通过本机查询更新值
问题描述
亲爱的 stackoverflow 社区,
我不确定为什么下面的代码不更新我的数据库数据,但是从休眠日志中获取查询似乎有效......
我正在使用休眠 5.2.12.Final
这是我的全部功能:
EntityManager em = Utils.initEntityManager();
em.getTransaction().begin();
em.persist(receptacle);
em.createNativeQuery("UPDATE product_item pi"
+ " JOIN ereturn er ON pi.ereturn = er.id "
+ "SET pi.receptacle = :receptacle "
+ "WHERE pi.returnAction = :returnAction "
+ "AND er.destination = :destination "
+ "AND er.status = 'RECEIVED'")
.setParameter("receptacle", receptacle.getId())
.setParameter("returnAction", receptacle.getReturnAction())
.setParameter("destination", receptacle.getDestination().getId())
.executeUpdate();
em.getTransaction().commit();
em.close();
这是来自休眠的日志
19:47:29,048 DEBUG [org.hibernate.SQL] -
UPDATE
product_item pi
JOIN
ereturn er
ON pi.ereturn = er.id
SET
pi.receptacle = ?
WHERE
pi.returnAction = ?
AND er.destination = ?
AND er.status = 'RECEIVED'
Hibernate:
UPDATE
product_item pi
JOIN
ereturn er
ON pi.ereturn = er.id
SET
pi.receptacle = ?
WHERE
pi.returnAction = ?
AND er.destination = ?
AND er.status = 'RECEIVED'
19:47:29,049 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] - binding parameter [1] as [BIGINT] - [20]
19:47:29,049 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] - binding parameter [3] as [BIGINT] - [148375]
19:47:29,049 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] - binding parameter [2] as [VARBINARY] - [RETURNTOCLIENT]
我从日志中获取相同的查询,替换参数并在我的 mysql 控制台中运行它......查询有效!!!
问题:为什么上面的更新查询运行时mysql没有更改任何数据?
非常感谢你
解决方案
问题是 returnAction 字段是一个枚举,所以我必须将它转换为字符串。
奇怪的是hibernate没有抱怨......
这是修复:
em.createNativeQuery("UPDATE product_item pi"
+ " JOIN ereturn er ON pi.ereturn = er.id "
+ "SET pi.receptacle = :receptacle "
+ "WHERE pi.returnAction = :returnAction "
+ "AND er.destination = :destination "
+ "AND er.status = 'RECEIVED'")
.setParameter("receptacle", receptacle.getId())
.setParameter("returnAction", receptacle.getReturnAction().toString())
.setParameter("destination", receptacle.getDestination().getId())
.executeUpdate();
推荐阅读
- android - 带有协程错误处理的 Kotlin Android Retrofit 2.6.0
- python-3.x - 如何计算大于 x 的值并检查持续时间
- r - 过滤(dplyr)因子级别不会过滤它应该过滤的所有行
- javascript - 通过 npm INSIDE 基础项目安装 3rd 方 JS 插件会产生错误
- java - Java - “同步”和“最终”方法,声明排序
- openid - 无法使用 nuxts auth 模块从 keycloaks userinfo 端点获取用户信息
- android - Pro guard - Gradle 问题 - 配置引用未知类
- python-3.x - 需要帮助来理解这个函数背后的逻辑
- vaex - 如何在 Vaex 中进行交互式 2D 散点图缩放/点选择?
- wpf - 处理重叠的拖动形状