sql >> Databáze >  >> RDS >> Mysql

Omezte velikost sbírky v JPA

Použil bych kód k ručnímu vynucení tohoto pravidla. Hlavní myšlenkou je, že kolekce B by měla být dobře zapouzdřená, aby klient mohl její obsah měnit pouze veřejnou metodou (tj. addB() ). Jednoduše zajistěte toto pravidlo v této metodě (addB() ), aby bylo zajištěno, že počet položek v kolekci B nemůže být větší než hodnota.

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

Hlavní body:

  • A by měl být vlastníkem vztahu.
  • V A nevracejte jednoduše B, protože klient může obejít kontrolní logiku implementovanou v addB(B b) a libovolně měnit jeho obsah. Místo toho vraťte neměnný pohled na B.
  • V @OneToMany nastavte orphanRemoval na true, aby JPA sdělil, aby odstranil DB záznamy B po odstranění jejich odpovídajících instancí z kolekce B.


  1. Jak nahrát obrázek na server localhost, když je cesta uložena v databázi mysql?

  2. propojte mysql s javou pomocí eclipse

  3. Nelze zrušit tabulku:Omezení cizího klíče se nezdaří

  4. Průvodce instalací MySQL na Windows krok za krokem