0

我已经尝试解决这个错误很多天了,但我并没有快速解决任何问题。我发现许多其他文章讨论了这个特定的错误,但我相信我的情况有点独特。

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

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

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

4

0 回答 0