gpt4 book ai didi

java - 批量更新从更新 [0] 返回了意外的行数;

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:13:09 24 4
gpt4 key购买 nike

我使用这个实体来记录到数据库中。

@Entity
@Table(name = "SYSTEM_USERS")
public class SystemUsersModel implements Serializable
{
private static final long serialVersionUID = 8432414340180447723L;

@Id
@GeneratedValue
private Integer id;

@Column
private String username;

@Column
private String email;

@Column
@Type(type = "date")
@Temporal(TemporalType.DATE)
private Date lastlogin;

@Column
private String password;

@Column
private String salt;

@Column
@Type(type = "date")
@Temporal(TemporalType.DATE)
private Date added;

删除查询:

SessionFactory factory = HibernateUtils.getSessionFactory();
Session session = factory.getCurrentSession();

try
{
session.getTransaction().begin();

SystemUsersModel obj = new SystemUsersModel();
obj.setId(userlist.getId());

session.delete(obj);

session.getTransaction().commit();

blacklists.remove(selectedBlackListEntry);
selectedBlackListEntry = null;
}
catch (Exception e)
{
e.printStackTrace();
session.getTransaction().rollback();
}

然后我运行我得到这个错误的代码:

Caused by: org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1

在启动应用程序之前,我使用脚本插入了几行。我该如何解决这个问题?

最佳答案

当您使用 hibernate 管理对象实例时,它们必须“附加”到 session 。

如果您使用 new 创建对象,您需要先将其附加到 session ,然后才能使用 hibernate 管理它。

当一个对象(具有生成的 id)有一个 id 值时,hibernate 期望该对象存在于他的 session 中(因为 id 值只有在 hibernate 生成它或 hibernate 通过查询从数据库中获取它时才能存在) ,否则它会抛出陈旧异常。

您必须调用 saveOrUpdate 以便 hibernate 创建它的 Id 并将实例附加到 session (以防它不存在于数据库中),或者调用 load 使用 hibernate 的 id 从数据库中获取实例(如果它存在于数据库中)。

在这种情况下,您知道 id,因此您必须查询 hibernate 以获得附加实例。所以,试试这个:

SystemUsersModel obj = session.load(SystemUsersModel.class, userlist.getId());
session.delete(obj);

这里是 hibernate session 实例方面的不同状态的解释:https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/objectstate.html

编辑:感谢@vanoekel

或者更好的是,您可以只使用 getReference 而不是 load,因为如果您只是想在之后删除它,那么它在资源方面的成本会更低。

关于java - 批量更新从更新 [0] 返回了意外的行数;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44933587/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com