我无法理解为什么我会收到这个错误并且已经将我的头撞在墙上几个小时了。
session.beginTransaction();
@SuppressWarnings("unchecked")
List<ActAsUser> actAsUser = (List<ActAsUser>) session.createCriteria(ActAsUser.class)
.add(Restrictions.eq("actAsID.userID", proxyID))
.add(Restrictions.eq("actAsID.targetID", targetID))
.list();
session.delete(actAsUser.get(0));
session.getTransaction().commit();
上面的代码在尝试删除数据库中我没有使用Hibernate添加的任何行时发生错误,即通过常规SQL输入的数据库的所有现有行。
Error: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
如果我在我的应用程序中使用Hibernate插入一行,那么我可以删除该行。
我无法理解的是,我首先从数据库中获取用户,因此我知道用户存在。
我已经检查了Hibernate SQL,我在运行select语句时可以看到的唯一区别是:
工作
/* criteria query */ select
this_.PROXY_USER_ID as PROXY1_12_0_,
this_.TARGET_USER_ID as TARGET2_12_0_,
this_.EFFCT_DATE as EFFCT3_12_0_,
this_.INCIDENT_NBR as INCIDENT4_12_0_,
this_.TARGET_USER_NAME as TARGET5_12_0_,
this_.EXPIRY_DATE as EXPIRY6_12_0_
不工作
/* criteria query */ select
this_.PROXY_USER_ID as PROXY1_16_0_,
this_.TARGET_USER_ID as TARGET2_16_0_,
this_.EFFCT_DATE as EFFCT3_16_0_,
this_.INCIDENT_NBR as INCIDENT4_16_0_,
this_.TARGET_USER_NAME as TARGET5_16_0_,
this_.EXPIRY_DATE as EXPIRY6_16_0_
附加到列末尾的数字有所不同,任何人都可以告诉我这些实际意味着什么以及这是否是问题,因为这是我在两个查询之间可以找到的唯一差异。
答案 0 :(得分:0)
刚刚完成了
删除状态网的Hibernate查询不起作用:
Hibernate:
/* delete com.package.ActAsUser */ delete
from
CONFIG_ACTAS_PROXY
where
PROXY_USER_ID=?
and TARGET_USER_ID=?
and EFFCT_DATE=?
13:39:01,460 TRACE BasicBinder:82 - binding parameter [1] as [VARCHAR] - A534651
13:39:01,460 TRACE BasicBinder:82 - binding parameter [2] as [VARCHAR] - A512058
13:39:01,460 TRACE BasicBinder:82 - binding parameter [3] as [DATE] - 2014-11-03
PROXY_USER_ID TARGET_USER_ID EFFCT_DATE A534651 A512058 2014-11-03 04:24:44
这是设定日期的时间。
通过休眠添加行时,日期如下:
2014-11-03 00:00:00
我数据库中的其他行看起来像
2014-11-03 04:24:44
当我编辑它们并将时间设为00:00:00时,删除然后有效。
将hibernate映射更改为映射到时间戳类型而不是日期也可以解决我的应用程序中的问题。