2014-02-25 2 views
0

Я разрабатываю веб-сайт, и у него довольно много отношений. Это означает, что обычно, когда я удаляю что-то, это может быть связано с множеством других вещей, что приведет к удалению слишком многих вещей. В этом отношении я хотел бы задать вам несколько вопросов:Play - ebean cascade delete options

  1. Каковы варианты каскада и как отключить каскадное удаление.
  2. Допустим, у нас есть следующий случай:

КЛАСС ЗАДАЧА:

@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, поскольку они все еще используются.

Какие каскадные варианты я использую для этого случая?

ответ

2

Найден ответ! Кажется, что каскадное удаление в терминах базы данных и в структуре - это не одно и то же. cascade = CascadeType.ALL удаляет объект и ссылки этого объекта другим. Однако он не удаляет другие объекты.

Спасибо, мой блестящий «я».