OK, bắt đầu,
Tôi giả sử bạn đang xây dựng ứng dụng của mình với Spring Boot, Hibernate làm ORM của bạn và có thể là một số loại hoặc cơ sở dữ liệu quan hệ (MySQL).
Về thiết kế db:
Có, đối tượng Patreon ở đây là thực thể sở hữu có mối quan hệ OneToMany với thực thể Item (vì một Patreon có thể có N đối tượng). Thực thể Patreon của bạn có thể thực hiện với việc thiết kế lại sau:
1) Cố gắng sử dụng các kiểu không nguyên thủy, đặc biệt cho các khóa bảng (id dài -> id dài).
2) Mất mảng checkOutItems cũng như danh sách itemHistory. Trước hết các quan hệ nên được mô hình hóa bằng cách sử dụng các bộ sưu tập chứ không phải mảng. Thứ hai, bạn không cần hai thứ đó, bạn sẽ không bao giờ lưu trữ các mục CheckOutItems cũng như itemHistory theo cách này. Thay vào đó, hãy tạo một List<Item> items
sẽ lưu trữ các mục Patreon trong khi mô tả mối quan hệ (đây là một số ví dụ: http:/ /www.baeldung.com/hibernate-one-to-many
)
3) Một lần nữa với thực thể Item, bạn cần làm mất mảng lịch sử. Điều duy nhất bạn cần là tham chiếu đến thực thể sở hữu (trong trường hợp này là Patreon), do đó hoàn thành phía ManyToOne của mối quan hệ.
4) Lưu ý rằng các trường Ngày nên được chú thích bằng @Temporal
cũng cung cấp đúng loại (bạn có thể đọc thêm).
5) Lớp vật phẩm nói chung nên làm với thiết kế lại.
5) Sau khi tất cả những điều trên đã sẵn sàng và giả sử bạn đang sử dụng Spring, bạn có thể tạo một Kho lưu trữ mà bạn có thể truy vấn một đối tượng Patreon, do đó truy xuất một đối tượng cùng với các thực thể liên quan của nó (Mục).
Về câu hỏi của bạn:
Q1:Vâng, nó thấy. Xem ở trên để biết thêm.
Q1.2:Không có mảng nào là không. Danh sách hoặc tốt hơn Bộ phù hợp hơn.
Q1.3:Vâng, có. Cái đầu tiên là chú thích JPA được sử dụng trong cơ sở dữ liệu tương đối trong khi cái thứ hai là chú thích dành riêng cho Dữ liệu mùa xuân được sử dụng bởi cơ sở dữ liệu và khuôn khổ không thuộc loại này (quan hệ) hoặc không có API ổn định tiêu chuẩn được xác định (nhưJPA). Đối với NonNull và NotNull gần giống với phần đầu tiên thực sự thay thế phần thứ hai (một việc thường được thực hiện). Sự khác biệt duy nhất tôi thấy là mục tiêu. Bạn có thể đọc formore tại đây: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/lang/NonNull.html https://docs.oracle.com/javaee /7/api/javax/validation/constraints/NotNull.html
Q2:Vâng, có. Xem ở trên.
Câu hỏi 3:Với một chút mô tả thông minh, tôi không thấy cần thiết phải làm thêm, nhưng nếu bạn cảm thấy nó sẽ giúp ích cho bạn, tại sao không. Chỉ cần không làm quá mức cần thiết và nó phức tạp