Playframework 播放-ebean级联删除选项

Playframework 播放-ebean级联删除选项,playframework,cascade,ebean,cascading-deletes,Playframework,Cascade,Ebean,Cascading Deletes,我正在开发一个网站,它有相当多的多对多的关系。这意味着,通常当我删除某个内容时,它可能会连接到大量其他内容,这将导致删除太多的内容。在这方面,我想问你几件事: 什么是级联选项以及如何禁用级联删除 假设我们有以下情况: 课堂任务: @Entity public class Task extends Model { @Id public Long id; @Required public String label; @ManyToMany p

我正在开发一个网站,它有相当多的多对多的关系。这意味着,通常当我删除某个内容时,它可能会连接到大量其他内容,这将导致删除太多的内容。在这方面,我想问你几件事:

  • 什么是级联选项以及如何禁用级联删除
  • 假设我们有以下情况:
  • 课堂任务:

    @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();
    
        }   
    
    }
    
    @实体
    公共类任务扩展模型{
    @身份证
    公共长id;
    @必需的
    公共字符串标签;
    @许多
    public List users=new ArrayList();
    public void addUser(用户){
    用户。添加(用户);
    }
    公共静态列表所有(){
    返回find.all();
    }
    公共静态查找器find=新查找器(
    长类,任务类
    );
    公共静态无效创建(任务){
    task.save();
    }
    公共静态无效删除(长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);
    
        }
    }
    
    @实体
    @表(name=“Users”)
    公共类用户扩展模型{
    @身份证
    公共长id;
    @必需的
    公共字符串名称;
    @许多
    public List tasks=new ArrayList();
    公共静态列表所有(){
    返回find.all();
    }
    公共静态查找器find=新查找器(
    Long.class,User.class
    );
    公共静态无效创建(用户){
    user.save();
    }
    公共静态无效删除(长id){
    find.ref(id.delete();
    }
    公共无效添加任务(任务任务){
    任务。添加(任务);
    }
    }
    
    正如您所看到的,任务有许多用户,用户有许多任务。删除对象时,我不仅要删除对象本身,还要删除其他对象对该对象的引用。比如说:

    用户John有三个任务要做:A、B和C 任务A、B和C也分配给其他用户。 我想删除John并删除John对A、B和C的数据库引用。 我不想删除A、B和C任务,因为它们仍在使用中


    在这种情况下,我应该使用什么级联选项

    找到了答案!似乎数据库术语中的级联删除和框架中的级联删除不是一回事。cascade=CascadeType.ALL删除对象以及该对象对其他对象的引用。但是,它不会删除其他对象

    谢谢你,我辉煌的自我