我一直试图解决这个错误很多天了,而且我没有快速到达任何地方。我发现很多其他文章都在讨论这个特殊错误,但我相信我的情况有点独特。
我在生产环境中收到以下错误。我无法在开发或登台环境中复制。这是完全随机的。有时它可能会背靠背发生,有时可能会发生在每小时几次。
更新/删除的行不存在或包含会话 陈旧的数据。根本原因:org.hibernate.StaleStateException:批处理 update更新从update [0]返回的意外行数;实际行 数:0;预期:1
我有一个非常简单的用户CFC ORM,在用户登录时,我更新了上次登录日期。这就是它,但随机抛出一个错误。我启用了SQL日志记录,但我没有看到任何可疑的内容。在日志中,我看到我的update语句运行时带有所有适用的参数值。
用户表有一些更新表的触发器;但是,我已禁用所有适用的触发器,但我仍然随机获取错误。
最后,我没有对主键做任何奇怪的事情,您可以从下面的代码中看到。
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);
}
}
此应用程序使用CF 11与Coldbox和MSSQL 2008。
无论如何,我能得到的任何帮助都非常感谢。