播放 - ebean级联删除选项

时间:2014-02-25 13:17:45

标签: playframework cascade ebean cascading-deletes

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

  1. 什么是级联选项以及如何禁用级联删除。
  2. 假设我们有以下案例:
  3. CLASS TASK:

    @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();
    
        }   
    
    }
    

    CLASS USER:

    @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任务。

    我在这种情况下使用哪些级联选项?

1 个答案:

答案 0 :(得分:2)

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

谢谢你我的光辉。