gpt4 book ai didi

java - 我的代码抛出 org.hibernate.ObjectDeletedException 异常

转载 作者:行者123 更新时间:2023-11-30 09:19:10 25 4
gpt4 key购买 nike

我有一个包含书籍对象列表的用户类。一旦用户的记录被创建,他所借的所有书籍都将被添加到他的对象中的书籍列表中。一旦用户删除了他的个人资料,就需要保留借书的记录和历史。

许多注册用户可能会经常借书并删除他们的个人资料。为了加快信息检索速度(例如,检索 Activity 用户列表),我不想将已删除配置文件的记录保存在我保存 Activity 配置文件记录的同一个表中。

目前,一旦用户想要删除他的个人资料,我将该对象 (userObj) 放在 deactiveUserObj 中,并从 User 表中删除用户的记录,并尝试保存 deactiveUserObj 以在该表中保留停用记录的记录,但它会抛出以下异常.

我的选择:我知道我可以创建另一个表并在其中保留 Activity 用户的 ID,或者为用户类增加一个 boolean 类型的列,并将其设置为 false 以指示记录已删除。但是,我不确定这三种方法中哪一种更好,或者是否还有另一种我没有考虑过的方法。

用户类

@Entity
public class User{

private long id;
private List<Book> books;
...

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
public List<Book> getBooks() {
return books;
}
....

读书课

@Entity
public class Book{

private long id;
private string name;
...
}

删除对象类

@Entity
public class DeactiveUsers{

private long id;
private date deactiveSince;
private List<Book> books;
...

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
public List<Book> getBooks() {
return books;
}
....

}

MyCode

1) code to retrieve an object of user class goes here
2) code to copy object of user class into deletedObject goes here
3) 3.1 - session.delete(userObj);
3.2 - session.saveOrUpdate(deactiveUsersObj);

代码遇到如下错误

SEVERE: org.hibernate.ObjectDeletedException: deleted object would be re-saved by 
cascade (remove deleted object from associations): [com.project.Book#1]

最佳答案

首先:错误的原因是您在 User.getBooks() 上将级联设置为 ALL,这将在您删除用户时删除其书籍。然后,在同一 session 中,您尝试在添加 DeactivatedUser 时重新添加已删除的对象(其中包含相同的书籍 - 虽然您没有显示从用户构造 DeactivatedUser 的代码,但我认为您是像你应该的那样制作 Books 的浅拷贝)。将级联更改为 SAVE_UPDATE。

其次:我强烈建议将它们全部保存在同一个表中,并使用一个标志字段来指示它们是否被删除。

不要过早优化。除非您实际上已经对您的代码进行了基准测试并发现了与活跃用户和非活跃用户相关的数据库查询瓶颈,否则过度复杂化您的模式和业务逻辑没有任何好处。大多数 SQL 服务器都非常高效,您不太可能在那里发现应用程序的瓶颈。

这样做,提高性能的一个简单方法是简单地在删除的标志字段上创建一个索引。

使用 Hibernate,您将能够通过条件轻松选择 Activity 用户和已删除用户。

此外,最重要的是,由于没有单独的 User 和 DeactiveUser 对象,您不必并行维护这两个对象,也不必复制可对这两种类型进行操作的代码。

关于java - 我的代码抛出 org.hibernate.ObjectDeletedException 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18092691/

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