【发布时间】:2014-02-25 13:17:45
【问题描述】:
我正在开发一个网站,它有很多多对多的关系。这意味着通常当我删除某些内容时,它可能会连接到大量其他内容,这将导致删除太多内容。在这方面我想问你几件事:
- 什么是级联选项以及如何禁用级联删除。
- 假设我们有以下案例:
类任务:
@Entity
public class Task extends Model {
@Id
public Long id;
@Required
public String label;
@ManyToMany
public List<User> users = new ArrayList();
public void addUser(User user){
users.add(user);
}
public static List<Task> all(){
return find.all();
}
public static Finder<Long,Task> find = new Finder(
Long.class, Task.class
);
public static void create (Task task){
task.save();
}
public static void delete (Long id){
find.ref(id).delete();
}
}
类用户:
@Entity
@Table(name="Users")
public class User extends Model {
@Id
public Long id;
@Required
public String Name;
@ManyToMany
public List<Task> tasks = new ArrayList();
public static List<User> all(){
return find.all();
}
public static Finder<Long,User> find = new Finder(
Long.class, User.class
);
public static void create (User user){
user.save();
}
public static void delete (Long id){
find.ref(id).delete();
}
public void addTask(Task task){
tasks.add(task);
}
}
如您所见,任务有很多用户,而用户有很多任务。当我删除一个对象时,我不仅要删除对象本身,还要删除其他对象对该对象的引用。比如说:
用户 John 有三项任务要做:A、B 和 C 任务 A、B 和 C 也分配给其他用户。 我想删除 John 并删除 John 对 A、B 和 C 的数据库引用。 我不想删除 A、B 和 C 任务,因为它们仍在使用中。
在这种情况下,我使用哪些级联选项?
【问题讨论】:
标签: playframework cascade ebean cascading-deletes