Hôm nay nhiệm vụ của chúng ta là hoàn thành project thứ 2 về chủ đề Hibernate. Bản chất của nó là hiểu cấu trúc của cơ sở dữ liệu, ánh xạ thực thể vào các bảng hiện có và thêm chức năng tối thiểu để kiểm tra xem ánh xạ có được thực hiện chính xác hay không.
Bây giờ chi tiết hơn:
- Tải xuống tệp kết xuất và triển khai nó vào máy cục bộ của bạn. Là cơ sở dữ liệu, chúng tôi sẽ sử dụng cơ sở dữ liệu thử nghiệm, được phân phối làm ví dụ cùng với gói cài đặt MySQL. Kết xuất là cần thiết để khắc phục trạng thái của cơ sở dữ liệu, vì chúng tôi không thể đảm bảo rằng nó sẽ không thay đổi trong một ngày, tháng, năm.
- Chúng tôi sẽ không có mẫu dự án, vì vậy hãy tự tạo dự án. Nó phải là một dự án maven với tất cả các phụ thuộc bắt buộc ( hibernate-core-jakarta , mysql-connector-java , p6spy ).
- Cắm cơ sở dữ liệu được triển khai cục bộ của chúng tôi làm nguồn dữ liệu trong Idea. Sau đó, trong tab Cơ sở dữ liệu, hãy đặt con trỏ vào lược đồ phim và nhấn tổ hợp phím
Alt+Ctrl+Shift+U
(chỉ hoạt động trong phiên bản Ultimate). Điều này sẽ hiển thị cấu trúc của toàn bộ lược đồ phim (với tên cột, khóa, v.v.). Trông như thế này:Tôi đồng ý, nó không thoải mái lắm khi xem. Tắt hiển thị tiêu đề tất cả các cột và bình luận:
Kết quả là, bạn sẽ nhận được một lược đồ cơ sở dữ liệu có thể được phân tích:
- Mạch trông phức tạp, nhưng không phải mọi thứ đều tệ như vậy. Để phân tích cấu trúc của cơ sở dữ liệu, bạn cần tìm nơi bắt đầu. Không có câu trả lời đúng duy nhất, nhưng tôi khuyên bạn nên bắt đầu với một bảng
film
. Hãy lấy một vài mối quan hệ làm ví dụ:- Mối quan hệ giữa các bảng
film
vàfilm_text
là mối quan hệ OneToOne rõ ràng , bởi vì bảngfilm_text
có mộtfilm_id
trườngKHÔNGđề cập đến một ID từ một bảngfilm
(không có khóa ngoại). Nhưng theo tên và logic, kết nối này phải như vậy. Ngoài ra, trong bảng,film_text
trườngfilm_id
đóng vai trò là khóa chính, đảm bảo rằng một "phim" tương ứng với không quá một "văn bản phim". - Bây giờ hãy xem các bảng
film
vàcategory
. Về mặt logic, một bộ phim có thể có nhiều hạng mục. Và một thể loại, có thể là những bộ phim khác nhau. Ngoài ra, giữa hai bảng này còn có một bảng liên kết trung gianfilm_category
. Dựa trên tất cả những điều trên, đây là mối quan hệ ManyToMany rõ ràng . - Chúng tôi nhìn vào các bảng
film
vàlanguage
. Từ quan điểm logic, bộ phim có thể có bản dịch sang các ngôn ngữ khác nhau và các bộ phim khác nhau có thể ở cùng một ngôn ngữ. Đó là, ManyToMany tự đề xuất . Nhưng nếu chúng ta nhìn vào nội dung của bảngfilm
, chúng ta có thể thấy rằng mỗi hàng của bảng là một bộ phim duy nhất. Và chỉ có một trường language_id trong dòng (còn có original_language_id nhưng trong tất cả các bản ghi đều là null nên chúng ta có thể bỏ qua). Đó là, một bộ phim chỉ có thể có một ngôn ngữ. Và một ngôn ngữ, có thể là những bộ phim khác nhau. Kết nối là ManyToOne (kết nối hướng từ phim sang ngôn ngữ).
- Mối quan hệ giữa các bảng
- Bây giờ nhiệm vụ chính là tạo ra tất cả các lớp thực thể cần thiết và ánh xạ chúng vào các bảng lược đồ
movie
. - Thêm một phương thức có thể tạo một khách hàng mới (bảng khách hàng) với tất cả các trường phụ thuộc. Đừng quên thực hiện phương thức giao dịch (để không rơi vào tình huống địa chỉ của người mua được ghi lại trong cơ sở dữ liệu, nhưng bản thân người mua thì không).
- Thêm một phương thức giao dịch mô tả sự kiện "khách hàng đã đi và trả lại một bộ phim đã thuê trước đó". Chọn bất kỳ sự kiện người mua và cho thuê nào bạn chọn. Rating của phim không cần phải tính lại.
- Thêm một phương thức giao dịch mô tả sự kiện “người mua đã đến cửa hàng (cửa hàng) và thuê (thuê) hàng tồn kho (hàng tồn kho) ở đó. Đồng thời, anh ta đã thanh toán (thanh toán) cho người bán (nhân viên). Phim (thông qua hàng tồn kho) chọn theo quyết định của bạn. Hạn chế duy nhất là phim phải có sẵn để thuê. Nghĩa là, hoặc là không có bản ghi hàng tồn kho nào cho thuê cả, hoặc cột return_date của bảng
rental
cho lần thuê cuối cùng của hàng tồn kho này phải được điền vào. - Thêm một phương thức giao dịch mô tả sự kiện "một bộ phim mới đã được quay và nó có sẵn để cho thuê." Phim, ngôn ngữ, diễn viên, thể loại, v.v., tùy ý chọn.
- Không thể thay đổi cấu trúc bảng. Nhưng bạn cần đưa ra đề xuất để cải thiện. Chúng tôi đã xác định được một chỗ có vấn đề trong đoạn 4 (không có khóa ngoại trong bảng
film_text
trên trườngfilm_id
bảngfilm
). Xem liệu có còn những “lỗi” như vậy trong cấu trúc cơ sở dữ liệu hay không. Nếu vậy, hãy thêm tệp readme vào thư mục gốc của dự án và mô tả những sai lầm ngớ ngẩn này.
Phân tích dự án: