sql >> Database >  >> RDS >> Mysql

Beperk de grootte van een verzameling in JPA

Ik zou de code gebruiken om deze regel handmatig af te dwingen. Het belangrijkste idee is dat de collectie B goed moet worden ingekapseld, zodat de klant de inhoud alleen kan wijzigen door middel van een openbare methode (d.w.z. addB() ) . Zorg ervoor dat deze regel binnen deze methode (addB() ) om ervoor te zorgen dat het aantal items in collectie B niet groter kan zijn dan een waarde.

A:

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

Belangrijkste punten:

  • A zou de eigenaar van de relatie moeten zijn.
  • Retourneer in A niet gewoon B omdat de klant de controlelogica kan omzeilen die is geïmplementeerd in addB(B b) en de inhoud ervan vrij wijzigen. Geef in plaats daarvan een niet-aanpasbare weergave van B terug.
  • Stel in @OneToMany orphanRemoval . in to true om JPA te vertellen de DB-records van B te verwijderen nadat de bijbehorende instanties uit de B-verzameling zijn verwijderd.


  1. TIMEDIFF() vs SUBTIME() in MySQL:wat is het verschil?

  2. Kan ik VARCHAR als PRIMAIRE SLEUTEL gebruiken?

  3. Opvragen van huidige datum in tijd mysql

  4. Mysql COUNT(*) op meerdere tabellen