今日の私たちのタスクは、Hibernate トピックに関する 2 番目のプロジェクトを完了することです。その本質は、データベースの構造を理解し、エンティティを既存のテーブルにマッピングし、マッピングが正しく行われていることを確認するための最小限の機能を追加することです。
さらに詳しく:
- ダンプ ファイルをダウンロードし、ローカル マシンに展開します。データベースとして、MySQL インストール パッケージとともにサンプルとして配布されるテスト データベースを使用します。データベースの状態が 1 日、1 か月、1 年以内に変化しないことを保証できないため、ダンプはデータベースの状態を修正するために必要です。
- プロジェクトテンプレートはありませんので、自分でプロジェクトを作成してください。これは、必要な依存関係 ( hibernate-core-jakarta、mysql-connector-java、p6spy )をすべて備えた Maven プロジェクトである必要があります。
- ローカルにデプロイされたデータベースを Idea のデータソースとしてプラグインします。その後、[データベース] タブで、ムービー スキーマにカーソルを置き、キーの組み合わせを押します
Alt+Ctrl+Shift+U
(Ultimate バージョンでのみ機能します)。これにより、ムービー スキーマ全体の構造 (列名、キーなど) が表示されます。次のようになります。私も同意しますが、見るのはあまり快適ではありません。すべての列とコメントのタイトルの表示をオフにします。
その結果、すでに分析可能なデータベース スキーマが得られます。
- 回路は複雑に見えますが、すべてがそれほど悪いわけではありません。データベースの構造を分析するには、どこから始めるべきかを見つける必要があります。単一の正解はありませんが、表から始めることをお勧めします
film
。例としていくつかの関係を見てみましょう。film
テーブルには次のフィールドがあるため、テーブル間の関係はfilm_text
明示的なOneToOne関係になります。film_text
film_id
いいえテーブルのIDを参照しますfilm
(外部キーなし)。しかし、名前と論理からすると、この接続はそうあるべきです。さらに、テーブルでは、film_text
フィールドがfilm_id
主キーとして機能し、1 つの「映画」が 1 つの「映画テキスト」に対応しないことが保証されます。film
次に、表とを見てみましょうcategory
。論理的には、映画にはいくつかのカテゴリが存在します。そして、1 つのカテゴリー、おそらく別の映画。さらに、これら 2 つのテーブルの間には中間リンク テーブルがありますfilm_category
。上記すべてに基づくと、これは明示的なManyToMany関係です。- 表
film
とを見てみましょうlanguage
。論理の観点から見ると、映画は異なる言語に翻訳されている可能性があり、異なる映画が同じ言語である可能性もあります。つまり、ManyToMany はそれ自体を示唆します。しかし、テーブルの内容を見るとfilm
、テーブルの各行が固有の映画であることがわかります。そして、この行にはlanguage_idフィールドが1 つだけあります(original_ language_id もありますが、すべてのレコードで null なので無視できます)。つまり、1 つの映画には 1 つの言語しか使用できません。1 つの言語でも、もしかしたら異なる映画かもしれません。接続はManyToOneです(接続は映画から言語に向けられます)。
- ここでの主なタスクは、必要なすべてのエンティティ クラスを作成し、それらをスキーマ テーブルにマップすることです
movie
。 - すべての依存フィールドを含む新しい顧客 (顧客テーブル) を作成できるメソッドを追加します。このメソッドをトランザクション対応にすることを忘れないでください (購入者の住所はデータベースに記録されているが、購入者自身は記録されていないという状況に陥らないようにするため)。
- 「顧客が以前にレンタルした映画を返却しに行った」イベントを説明するトランザクション メソッドを追加します。ご希望のバイヤーとレンタル イベントを選択してください。映画の評価を再計算する必要はありません。
- 「買い手が店舗(ストア)に行き、そこで在庫(在庫)をレンタル(レンタル)した」というイベントを記述するトランザクションメソッドを追加します。同時に販売者(スタッフ)に代金の支払い(支払い)を行った。フィルムは(在庫から)あなたの裁量で選択してください。唯一の制限は、映画がレンタル可能であることです。つまり、レンタルに在庫レコードがまったく存在しないか、この在庫の最後のレンタルに関するテーブルのreturn_date
rental
列が埋められるかのどちらかです。 - 「新しい映画が撮影され、レンタル可能になった」というイベントを説明するトランザクション メソッドを追加します。映画、言語、俳優、カテゴリーなどはあなたの裁量で選択してください。
- テーブル構造は変更できません。ただし、改善のための提案を行う必要があります。段落 4 で問題のある箇所を 1 つ特定しました (テーブルフィールドのテーブルに外部キーが存在しない)。データベース構造にそのような「間違い」がまだあるかどうかを確認してください。その場合は、readme ファイルをプロジェクトのルートに追加し、これらの間違いを説明してください。
film_text
film_id
film
プロジェクト分析:
GO TO FULL VERSION