我有一类用户,其中包括书籍对象列表。创建用户记录后,他借阅的所有书籍都将添加到他的对象中的书籍列表中。一旦用户删除他的个人资料,就需要保留借阅书籍的记录和历史记录。
许多注册用户可能会经常借书并删除他们的个人资料。为了使信息检索更快(例如,检索活动用户列表),我不想将已删除配置文件的记录保存在我保存活动配置文件记录的同一个表中。
目前,一旦用户想要删除他的个人资料,我将该对象(userObj)放入 deactiveUserObj 并从 User 表中删除用户的记录,并尝试保存 deactiveUserObj 以将停用记录的记录保留在该表中,但它会引发以下异常。
我的选择:我知道我可以创建另一个表并将活动用户的 id 保留在那里,或者为用户类添加一个布尔类型的额外列,并将其设置为 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;
}
....
}
我的代码
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]