Question

Je développe un site Web et il a beaucoup beaucoup à de nombreuses relations. Cela signifie que, généralement lorsque je supprime quelque chose, il pourrait être connecté à des tonnes d'autres choses qui entraîneront la suppression de trop de choses. À cet égard, je voudrais vous poser quelques choses:

  1. Quelles sont les options de cascade et comment désactiver la suppression de cascade.
  2. Disons que nous avons le cas suivant:
  3. tâche 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();
    
        }   
    
    }
    

    Utilisateur de 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);
    
        }
    }
    

    Comme vous pouvez le constater que les tâches ont de nombreux utilisateurs et les utilisateurs ont de nombreuses tâches. Lorsque je supprime un objet, je souhaite supprimer non seulement l'objet lui-même, mais également les références d'autres objets à cet objet. Dire par exemple:

    Utilisateur John a trois tâches à faire: a, b et c Les tâches A, B et C sont également attribuées à d'autres utilisateurs. Je veux supprimer John et supprimer les références de base de données de John à A, B et C. Je ne veux pas supprimer les tâches A, B et C, car ils sont toujours utilisés.

    Quelles options Cascade dois-je utiliser pour ce cas?

Était-ce utile?

La solution

a trouvé la réponse!Il semble que la cascade supprimer en termes de base de données et dans le cadre ne soit pas la même chose.Cascade= cascadetype.all supprime l'objet et les références de cet objet aux autres.Cependant, il ne supprime pas d'autres objets.

Merci mon auto brillant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top