Mysql
 sql >> Base de données >  >> RDS >> Mysql

Limiter la taille d'une collection dans JPA

J'utiliserais le code pour appliquer manuellement cette règle. L'idée principale est que la collection B doit être bien encapsulée de sorte que seul le client puisse modifier son contenu par une méthode publique (c'est-à-dire addB() ). Assurez-vous simplement de cette règle à l'intérieur de cette méthode (addB() ) pour s'assurer que le nombre d'entrées à l'intérieur de la collection B ne peut pas être supérieur à une valeur.

R :

@Entity
public class A {


    public static int MAX_NUM_B = 4;

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    private Set<B> b= new LinkedHashSet<B>();

    public void addB(B b) {
        if (this.b.size() == MAX_NUM_B) {
            Iterator<B> it = this.b.iterator();
            it.next();
            it.remove();
        }
        this.b.add(b);
    }

    public Set<B> getB() {
        return Collections.unmodifiableSet(this.b);
    }
}

B :

@Entity 
public class B{

    @ManyToOne
    private A a;
}

Points principaux :

  • A doit être le propriétaire de la relation.
  • Dans A , ne retournez pas simplement B car le client peut contourner la logique de vérification implémentée dans addB(B b) et modifier librement son contenu. Renvoie plutôt une vue non modifiable de B .
  • Dans @OneToMany , définissez orphanRemoval à true pour indiquer à JPA de supprimer les enregistrements de la base de données de B après la suppression de ses instances correspondantes de la collection B.