sql >> Databasteknik >  >> RDS >> Mysql

Begränsa storleken på en samling i JPA

Jag skulle använda koden för att manuellt upprätthålla denna regel. Huvudtanken är att samlingen B ska vara väl inkapslad så att klienten endast kan ändra dess innehåll med en offentlig metod (dvs addB() ) . Se bara till den här regeln i den här metoden (addB() ) för att säkerställa att antalet poster i samling B inte kan vara större än ett värde.

S:

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

Huvudpunkter:

  • A bör vara ägaren av relationen.
  • I A , returnera inte bara B eftersom klienten kan kringgå kontrolllogiken implementerad i addB(B b) och ändra dess innehåll fritt. Ge istället tillbaka en oförändrbar vy av B .
  • I @OneToMany ställer du in orphanRemoval till sant att säga åt JPA att ta bort B:s DB-poster efter att dess motsvarande instanser har tagits bort från B-samlingen.


  1. Förhindrar användningen av WordPress get_results() databasfunktionen sql-injektion

  2. Hur man migrerar WHMCS-databas till MariaDB Galera Cluster

  3. Kontrollera en tabell för tidsöverlappning?

  4. Hur man visar sammanställningen av en databas i MySQL