Play - opções de exclusão em cascata do ebean
-
21-12-2019 - |
Pergunta
Estou desenvolvendo um site e ele tem muitos relacionamentos.Isso significa que normalmente, quando eu excluo algo, ele pode estar conectado a muitas outras coisas, o que resultará na exclusão de muitas coisas.A esse respeito, gostaria de lhe perguntar algumas coisas:
- Quais são as opções de cascata e como desabilitar a exclusão em cascata.
- Digamos que temos o seguinte caso:
TAREFA DE CLASSE:
@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();
}
}
USUÁRIO DA CLASSE:
@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);
}
}
Como você pode ver, as tarefas têm muitos usuários e os usuários têm muitas tarefas.Quando excluo um objeto, quero excluir não apenas o objeto em si, mas também as referências de outros objetos a esse objeto.Digamos por exemplo:
O usuário John tem três tarefas a realizar:As tarefas A, B e C também são atribuídas a outros usuários.Quero excluir John e excluir as referências do banco de dados de John para A, B e C.Não quero excluir as tarefas A, B e C, pois elas ainda estão sendo usadas.
Que opções de cascata devo usar neste caso?
Solução
Encontrei a resposta!Parece que a cascata delete em termos de banco de dados e na estrutura não é a mesma coisa.Cascade= CascadeType.All exclui o objeto e as referências desse objeto para outras pessoas.No entanto, não exclui outros objetos.
Obrigado meu eu brilhante.