sql >> Base de Datos >  >> RDS >> Mysql

Limitar el tamaño de una colección en JPA

Usaría el código para hacer cumplir manualmente esta regla. La idea principal es que la colección B debe estar bien encapsulada de modo que el cliente solo pueda cambiar su contenido mediante un método público (es decir, addB() ) . Simplemente asegúrese de esta regla dentro de este método (addB() ) para asegurarse de que el número de entradas dentro de la colección B no sea mayor que un valor.

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;
}

Puntos principales:

  • A debe ser el dueño de la relación.
  • En A, no devuelva simplemente B, ya que el cliente puede omitir la lógica de verificación implementada en addB(B b) y cambie su contenido libremente. En su lugar, devuelva una vista no modificable de B.
  • En @OneToMany, configure orphanRemoval a verdadero para decirle a JPA que elimine los registros de la base de datos de B después de que sus instancias correspondientes se eliminen de la colección B.