Hari ini tugas kita adalah menyelesaikan proyek kedua tentang topik Hibernasi. Esensinya adalah untuk memahami struktur database, memetakan entitas ke tabel yang ada, dan menambahkan fungsionalitas minimum untuk memeriksa apakah pemetaan dilakukan dengan benar.
Sekarang lebih detail:
- Unduh file dump dan sebarkan ke mesin lokal Anda. Sebagai database, kami akan menggunakan database pengujian, yang didistribusikan sebagai contoh bersama dengan paket instalasi MySQL. Dump diperlukan untuk memperbaiki keadaan database, karena kami tidak dapat menjamin bahwa itu tidak akan berubah dalam satu hari, bulan, tahun.
- Kami tidak akan memiliki template proyek, jadi buat proyek sendiri. Itu harus menjadi proyek maven dengan semua dependensi yang diperlukan ( hibernate-core-jakarta , mysql-connector-java , p6spy ).
- Sambungkan database lokal kami yang diterapkan sebagai sumber data di Idea. Setelah itu, di tab Database, letakkan kursor pada skema film dan tekan kombinasi tombol
Alt+Ctrl+Shift+U
(hanya berfungsi di versi Ultimate). Ini akan menampilkan struktur dari seluruh skema film (dengan nama kolom, kunci, dll.). Terlihat seperti ini:Saya setuju, sangat tidak nyaman untuk menonton. Matikan tampilan judul semua kolom dan komentar:
Hasilnya, Anda akan mendapatkan skema database yang sudah dapat dianalisis:
- Sirkuitnya terlihat rumit, tapi tidak semuanya buruk. Untuk menganalisis struktur database, Anda perlu menemukan dari mana harus memulai. Tidak ada satu pun jawaban yang benar, tetapi saya akan merekomendasikan untuk memulai dengan table
film
. Mari kita ambil beberapa hubungan sebagai contoh:- Relasi antar tabel
film
danfilm_text
merupakan relasi OneToOne yang eksplisit , karena tabel tersebutfilm_text
memiliki fieldfilm_id
yangBUKANmengacu pada ID dari tabelfilm
(tanpa kunci asing). Tetapi dengan nama dan logika, koneksi ini seharusnya. Selain itu, dalam tabel,film_text
bidangfilm_id
berfungsi sebagai kunci utama, yang menjamin bahwa satu "film" tidak lebih dari satu "teks film". - Sekarang mari kita lihat tabel
film
dancategory
. Logikanya, sebuah film bisa memiliki beberapa kategori. Dan satu kategori, mungkin film yang berbeda. Selain itu, ada tabel tautan perantara antara kedua tabel inifilm_category
. Berdasarkan semua hal di atas, ini adalah hubungan ManyToMany yang eksplisit . - Kami melihat tabel
film
danlanguage
. Dari sudut pandang logika, film tersebut mungkin memiliki terjemahan ke dalam bahasa yang berbeda dan film yang berbeda mungkin dalam bahasa yang sama. Artinya, ManyToMany menyarankan dirinya sendiri . Namun jika kita melihat isi dari tabel tersebutfilm
, kita dapat melihat bahwa setiap baris dari tabel tersebut merupakan film yang unik. Dan hanya ada satu field language_id di baris (ada juga original_language_id, tapi di semua record itu null, jadi kita bisa mengabaikannya). Artinya, satu film hanya boleh memiliki satu bahasa. Dan satu bahasa, mungkin film yang berbeda. Koneksinya adalah ManyToOne (koneksi diarahkan dari film ke bahasa).
- Relasi antar tabel
- Sekarang tugas utamanya adalah membuat semua kelas entitas yang diperlukan dan memetakannya ke tabel skema
movie
. - Tambahkan metode yang dapat membuat pelanggan baru (tabel pelanggan) dengan semua bidang dependen. Jangan lupa untuk membuat metodenya transaksional (agar tidak masuk ke situasi di mana alamat pembeli tercatat di database, tetapi pembelinya sendiri tidak).
- Tambahkan metode transaksional yang menjelaskan peristiwa "pelanggan pergi dan mengembalikan film yang disewa sebelumnya". Pilih pembeli dan acara persewaan pilihan Anda. Peringkat film tidak perlu dihitung ulang.
- Tambahkan metode transaksional yang menjelaskan peristiwa “pembeli pergi ke toko (store) dan menyewa (rental) persediaan (inventory) disana. Pada saat yang sama, ia melakukan pembayaran (pembayaran) kepada penjual (staf). Film (melalui inventaris) pilih sesuai kebijaksanaan Anda. Satu-satunya batasan adalah film harus tersedia untuk disewa. Artinya, tidak boleh ada catatan inventaris sama sekali di persewaan, atau kolom return_date dari tabel
rental
untuk persewaan terakhir dari inventaris ini harus diisi. - Tambahkan metode transaksional yang menjelaskan peristiwa "film baru dibuat dan tersedia untuk disewa". Film, bahasa, aktor, kategori, dll., pilih sesuai kebijaksanaan Anda.
- Struktur tabel tidak dapat diubah. Tetapi Anda perlu membuat saran untuk perbaikan. Kami mengidentifikasi satu tempat bermasalah di paragraf 4 (tidak adanya kunci asing dalam tabel
film_text
di bidangfilm_id
tabelfilm
). Lihat apakah masih ada "kesalahan" seperti itu dalam struktur basis data. Jika demikian, tambahkan file readme ke root proyek dan jelaskan kesalahan ini.
Analisis proyek: