Mysql
 sql >> база данни >  >> RDS >> Mysql

Ограничете размера на колекция в JPA

Бих използвал кода, за да наложа ръчно това правило. Основната идея е, че колекцията B трябва да бъде добре капсулирана, така че клиентът да може само да променя съдържанието си чрез публичен метод (т.е. addB() ) . Просто проверете това правило в този метод (addB() ), за да се гарантира, че броят на записите в колекция B не може да бъде по-голям от стойност.

О:

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

Б:

@Entity 
public class B{

    @ManyToOne
    private A a;
}

Основни точки:

  • A трябва да бъде собственик на връзката.
  • В A не връщайте просто B, тъй като клиентът може да заобиколи логиката за проверка, внедрена в addB(B b) и променяйте съдържанието му свободно. Вместо това върнете непроменяем изглед на B.
  • В @OneToMany задайте orphanRemoval на истина, за да каже на JPA да премахне DB записите на B, след като съответните му екземпляри бъдат премахнати от колекцията 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. WordPress pre_get_posts не работи

  2. Как да коригирам:Не е намерен подходящ драйвер за грешка jdbc:mysql://localhost/dbname при използване на пулове?

  3. Отделни със запетая стойности със същия брой редове

  4. Не мога да покажа изображение с php и mysql

  5. Разлика между float и десетичния тип данни