随机批量更新从更新返回意外行计数:0实际行数:0预期:1

时间:2016-03-28 19:38:48

标签: sql-server hibernate orm coldfusion coldbox

我一直试图解决这个错误很多天了,而且我没有快速到达任何地方。我发现很多其他文章都在讨论这个特殊错误,但我相信我的情况有点独特。

我在生产环境中收到以下错误。我无法在开发或登台环境中复制。这是完全随机的。有时它可能会背靠背发生,有时可能会发生在每小时几次。

  

更新/删除的行不存在或包含会话   陈旧的数据。根本原因: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。

无论如何,我能得到的任何帮助都非常感谢。

0 个答案:

没有答案