Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Ogranicz rozmiar kolekcji w JPA

Użyłbym kodu, aby ręcznie wymusić tę regułę. Główną ideą jest to, że kolekcja B powinna być dobrze zahermetyzowana, tak aby klient mógł zmienić jej zawartość tylko za pomocą metody publicznej (np. addB() ) . Po prostu upewnij się, że ta reguła jest w tej metodzie (addB() ), aby upewnić się, że liczba wpisów w zbiorze B nie może być większa niż wartość.

O:

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

Główne punkty:

  • A powinien być właścicielem związku.
  • W A , nie zwracaj po prostu B, ponieważ klient może ominąć logikę sprawdzania zaimplementowaną w addB(B b) i swobodnie zmieniaj jego zawartość. Zamiast tego zwróć niemodyfikowalny widok B .
  • W @OneToMany ustaw orphanRemoval na true, aby poinformować JPA, aby usunęła rekordy bazy danych B po usunięciu odpowiednich wystąpień z kolekcji B.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zaktualizuj WAMP do MySQL 5.5?

  2. Powrót do bazy danych Błąd upuszczania bazy danych errno:66 w MySQL

  3. Wydajność blokowania na poziomie wiersza InnoDB — ile wierszy?

  4. Wysyłanie haseł przez Internet

  5. Nie można utworzyć tabeli (errno:150) na FOREIGN KEY