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:

  1. 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.
  2. 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 ).
  3. 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:

  4. 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 filmdan film_textmerupakan relasi OneToOne yang eksplisit , karena tabel tersebut film_textmemiliki field film_idyangBUKANmengacu pada ID dari tabel film(tanpa kunci asing). Tetapi dengan nama dan logika, koneksi ini seharusnya. Selain itu, dalam tabel, film_textbidang film_idberfungsi sebagai kunci utama, yang menjamin bahwa satu "film" tidak lebih dari satu "teks film".
    • Sekarang mari kita lihat tabel filmdan category. Logikanya, sebuah film bisa memiliki beberapa kategori. Dan satu kategori, mungkin film yang berbeda. Selain itu, ada tabel tautan perantara antara kedua tabel ini film_category. Berdasarkan semua hal di atas, ini adalah hubungan ManyToMany yang eksplisit .
    • Kami melihat tabel filmdan language. 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 tersebut film, 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).
  5. Sekarang tugas utamanya adalah membuat semua kelas entitas yang diperlukan dan memetakannya ke tabel skema movie.
  6. 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).
  7. 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.
  8. 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 rentaluntuk persewaan terakhir dari inventaris ini harus diisi.
  9. Tambahkan metode transaksional yang menjelaskan peristiwa "film baru dibuat dan tersedia untuk disewa". Film, bahasa, aktor, kategori, dll., pilih sesuai kebijaksanaan Anda.
  10. 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_textdi bidang film_idtabel film). 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: