sql >> Database teknologi >  >> RDS >> Mysql

Begræns størrelsen af ​​en samling i JPA

Jeg ville bruge koden til manuelt at håndhæve denne regel. Hovedideen er, at samlingen B skal være godt indkapslet, således at klienten kun kan ændre dens indhold ved hjælp af en offentlig metode (dvs. addB() ). Du skal blot sikre denne regel i denne metode (addB() ) for at sikre, at antallet af poster i samling B ikke kan være større end en værdi.

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

Hovedpunkter:

  • A bør være ejeren af ​​forholdet.
  • I A skal du ikke blot returnere B, da klienten kan omgå kontrollogikken implementeret i addB(B b) og ændre dets indhold frit. Returner i stedet en uforanderlig visning af B .
  • I @OneToMany skal du indstille orphanRemoval til sandt at bede JPA om at fjerne B's DB-poster efter dets tilsvarende forekomster er fjernet fra B-samlingen.


  1. Hvordan kan jeg registrere en oprettelse, opdatering, sletningsforespørgsel er vellykket i Codeigniter

  2. MySQL:Aktiver trigger efter transaktionen er begået

  3. Randomisering Vælg underforespørgsel i MySQL, når du bruger GroupBy

  4. Fjern pivot-tabel i MySQL