我已经尝试解决这个错误很多天了,但我并没有快速解决任何问题。我发现许多其他文章讨论了这个特定的错误,但我相信我的情况有点独特。
我在生产环境中收到以下错误。我无法在开发或登台环境中复制。这是完全随机的。有时它可能会背靠背发生,有时它会每小时发生几次。
更新/删除的行不存在或会话包含陈旧数据。根本原因:org.hibernate.StaleStateException:批量更新从更新[0]返回了意外的行数;实际行数:0;预期:1
我有一个非常简单的用户 CFC ORM,在用户登录时,我更新了上次登录日期。就是这样,但它随机抛出一个错误。我已启用 SQL 日志记录,但没有发现任何可疑之处。在日志中,我看到我的更新语句使用所有适用的参数值运行。
用户表有一些更新表的触发器;但是,我已禁用所有适用的触发器,但我仍然随机收到错误。
最后,正如您从下面的代码中看到的那样,我没有对主键做任何奇怪的事情。
component
persistent="true"
table="Users"
schema="dbo"
{
// id
property name="id" column="usersID" fieldtype="id" ormtype="int" type="numeric" generator="native";
// fields
property name="type" column="userType" ormtype="short" type="numeric";
property name="loginType" ormtype="short" type="numeric";
property name="fname" ormtype="string" type="string";
property name="middle" ormtype="string" type="string";
property name="lname" ormtype="string" type="string";
property name="username" ormtype="string" type="string";
property name="phone" ormtype="string" type="string";
property name="email" ormtype="string" type="string";
property name="userDSN" ormtype="string" type="string";
property name="enPassword" ormtype="string" type="string";
property name="range" ormtype="string" type="string";
property name="isPasswordExpired" column="changePassword" ormtype="short" type="numeric" default="0";
property name="lastPasswordChangeDate" column="lastPasswordChange" ormtype="timestamp" type="date";
property name="isLocked" ormtype="boolean" type="boolean";
property name="lockedDate" ormtype="timestamp" type="date";
property name="invalidLoginCount" ormtype="short" type="numeric" default="0";
property name="lastLogin" ormtype="timestamp" type="date";
property name="isActive" column="active" ormtype="boolean" type="boolean";
// Non-Persistable Fields
property name="password" persistent="false" type="string" default="";
property name="loggedIn" persistent="false" type="boolean" default="false";
public User function init() {
setLoggedIn(false);
return this;
}
public string function getFullName() {
return getFname() & (len(trim(getMiddle())) ? " " & getMiddle() : "" ) & " " & getLname();
}
public boolean function isLoggedIn() {
return getLoggedIn();
}
public void function resetLockout() {
setIsLocked(0);
setLockedDate(javaCast("null", ""));
setInvalidLoginCount(0);
}
}
此应用程序使用带有 Coldbox 的 CF 11 和 MSSQL 2008。
无论如何,非常感谢我能得到的任何帮助。