【发布时间】:2017-12-09 13:21:42
【问题描述】:
我使用这个实体来记录到数据库中。
@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 在设置 id 时不太喜欢,你确定对象在指定 ID 的 db 中吗?尝试通过 id 查找对象,然后修改你需要的内容
-
当你询问异常时,总是,总是发布异常的完整堆栈跟踪。也就是说,问题很可能是您正在删除一个不存在的行。
-
这里是完整的堆栈跟踪pastebin.com/sFGMNGim
-
我猜 Frederico Paparoni 是对的。 Hibernate 使用代理对象和设置 ID 不适用于排除。