Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Giới hạn kích thước của một bộ sưu tập trong JPA

Tôi sẽ sử dụng mã để thực thi quy tắc này theo cách thủ công. Ý tưởng chính là tập hợp B nên được đóng gói tốt để chỉ máy khách có thể thay đổi nội dung của nó bằng một phương thức công khai (tức là addB() ). Chỉ cần đảm bảo quy tắc này bên trong phương thức này (addB() ) để đảm bảo rằng số lượng mục nhập bên trong bộ sưu tập B không được lớn hơn một giá trị.

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

Những điểm chính:

  • A phải là chủ sở hữu của mối quan hệ.
  • Trong A, không chỉ trả về B vì máy khách có thể bỏ qua logic kiểm tra được triển khai trong addB(B b) và thay đổi nội dung của nó một cách tự do. Thay vào đó, trả lại một cái nhìn không thể thay đổi về B.
  • Trong @OneToMany, hãy đặt orphanRemoval thành true để yêu cầu JPA xóa các bản ghi DB của B sau khi các cá thể tương ứng của nó bị xóa khỏi bộ sưu tập 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. Thay đổi bảng bằng cách sử dụng lựa chọn phụ

  2. Tạo một bảng cơ sở dữ liệu ActiveRecord không có:cột id?

  3. Làm thế nào để thực thi lệnh MySQL từ máy chủ đến vùng chứa đang chạy máy chủ MySQL?

  4. nhóm các giá trị Tandem chính xác từ 2 cột?

  5. Gửi biểu mẫu hộp thả xuống nhiều PHP tới MySQL