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:

  1. Quais são as opções de cascata e como desabilitar a exclusão em cascata.
  2. 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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top