0

在我的应用程序中,用户可以拥有一个收藏列表。最喜欢的列表可以有多种球。问题是,当我尝试删除用户表(session.delete(user))的记录时,它会删除添加到该用户收藏列表中的所有球的记录

但是,它应该只删除用户的选定记录、用户的收藏列表和收藏列表的收藏项,而不是球表中的任何记录

关系

Each User must have only one FavoritesList
Each FavoritesList may have zero to many FavoriteItems
Each FavoriteItems must have only one ball 
Each ball can be belong to zero to many FavoriteItems

课程

@Entity
public class User{
   ....
   @OneToOne(cascade = CascadeType.ALL)
   protected FavoritesList favoritesList;

   public User{
     ...
     this.favoritesList = new FavoritesList();
   }

   ....
}

@Entity    
public class FavoritesList {

   ...
   @OneToMany
   @LazyCollection(LazyCollectionOption.FALSE)
   private List<FavoriteItems> items;


   public FavoritesList(){
     this.items = new ArrayList();
   }
   ...
}

@Entity
public class FavoriteItems {
   ...
   @ManyToOne
   private Ball ball;

   ...
}
4

2 回答 2

1
@OneToOne(cascade = CascadeType.ALL)

这应该是问题所在,如果您是“全部级联”,则所有内容:“保存、删除、更新、驱逐、锁定、复制、合并、持久”都级联到与此相关的所有对象。

我有一段时间没有使用hibernate或jpa了,所以我不记得你到底需要什么,但这应该有助于选择你想要什么或者你不想级联什么:hibernate javadoc

于 2013-10-10T01:52:38.497 回答
1

当然,您还有其他保留球的列表,因为没有为 @ManyToOne over Ball 定义级联。

于 2013-10-10T07:51:29.290 回答