2017-03-15 31 views
1

、私は私が疑問に思って、新しいプロジェクト(これまでのところ、私はUML & MCDを作成しました)比較的大きなもの...多くのテーブル、多くの団体、inheretence ....JPA:エンティティからテーブルを生成するか、エンティティからテーブルを生成する必要がありますか?要するに

に取り組んでいますどのようなJPAを使用してデータベースを手動で作成してエンティティを生成するか、手動でエンティティを手動で作成してからデータベースを生成する必要がありますか?これを行う最良の方法は何ですか?後で大きな問題を避けることができます。

+0

DBを生成し、次にデータベースからエンティティを生成するliquibaseスクリプト – ByeBye

+0

エンティティからdbを生成することに決めました。私はストアドプロシージャやそのようなものを使用していないので、私のアプリケーションのためにまだテーブルを作成していない。なぜ私はこのapprocheと一緒に行くことにしたのかについての詳細については、受け入れられた答えを参照してください。ありがとう@ByeBye – cimecut

+0

私はJPAに自分のデータベース構造を管理させません。なぜなら、そのための標準的なオプションがすべてあなたのデータを破壊するからです。テーブルからエンティティを生成するか手動で行うかは、好みの問題です。 – coladict

答えて

2

それは:-)に依存します。

  • アプリケーションがデータベース(唯一のユーザー)を「所有している」場合、通常、データベースを実装の詳細として扱い、JPAに作成させることが理にかなっています。そうすれば、SQLを使いこなす必要はなく、データベースはJPAが期待するものと常に一致します。これは、Essex Boyの解答のように、テストのようなシナリオにも役立ちます。
  • データベースが既に存在する場合、または他のアプリケーションと共有される場合は、すでに選択されているため、そこにあるものを使用してください(注意して変更する必要があります)。
  • データベース構造に外部制約が存在する可能性があります。ストアドプロシージャを使用するか、特定のDB命名規則を使用するか、制約を課す更新中にスキーマを移行するためのツールを使用する必要があります。その場合は、DB構造の詳細な制御が必要になります。通常、SQLで自分で作成する必要があります。

したがって、作業している制約を確認してから決定してください。

+0

ありがとう!あなたの答えに基づいてエンティティからDBを生成することに決めました。 – cimecut

1

エンティティにテーブルを生成させることを強くお勧めします。

これはテストや開発にも役立ちます。たとえば、テストごとに構築され、分解されたH2データベースを使用できます。

プロジェクトが合理的に進歩するまで、私はデータベースを見ていません。

JPAエンティティは、テーブル名や列名を使用せずに作業を開始できます。プロジェクトの進行に伴い、コードの残りの部分に影響を与えずに列名と表名を一致させることができます。最終的な統合の段階では軽微な変更は、Oracleの特定のデータ型の異常を可能にするために、エンティティJPAのアノテーションを行うことができ

、DB2など

アプリケーションは、独自のデータベースに対して責任を負わなければなりません。これは、特に新しいプロジェクトに関係します。

+0

"アプリケーションは自分のデータベースを担当する必要があります。"実行可能な視点ではあるが、これは誰もが同意するものではない。長い間、データベースは複数のアプリケーションが相互運用するための良い方法と考えられていました。これは現在、おそらく変化しています。マイクロサービスは「独自の」データベースを持っているはずですが、決して誰もが同意しているものではありません。 – sleske

+0

私はたくさんの意見が一致しないと確信しています、これは私の見解です。問題は、既存のデータベースがないことを意味します。ストアドプロシージャは非常に多くの面で(私の意見では)命名規則はJPAアノテーションで対応できます。変更にはSQLではなくLiquibaseを使用する必要があります。 –

+0

十分クリア!ありがとう!これはまた、何かが私のデータベースを作成すると間違っていた場合に私のエンティティを編集することを避けるのに役立ちます... – cimecut

1

スキーマの生成(ORMレイヤーによって行われる)は便利な機能ですが、結果として得られるスキーマは、すべてのケースでデータベースに堅牢な人間(DBA)が実稼働する前に検証する必要があります。最初にスキーマを作成してから、適切なORMマッピングを作成することは、より効果的で信頼性の高い方法です。

+0

本当に、私はDB生成コード(後で生成することにしたので、私はDBから生成することにしました)を、DBAに提供してから、アプリケーションが生産に入る前に... – cimecut

1

エンティティからのテーブルまたはそれからのテーブル。データモデルからオブジェクトモデルを作成しないでください。常にドメイン解析からオブジェクトモデルを作成します。 JPAはではないデータ操作ツールです。これはオブジェクト操作ツールです。

データベーススキーマを制御できない場合は、オブジェクトモデルをサポートし、オブジェクトモデルをリレーショナルモデルにマップする方法を理解するだけでよいでしょう。そのため、オブジェクト間マッピングではなく、オブジェクト間マッピング(ORM)と呼ばれています。

データモデルがあなたのオブジェクトモデルを駆動することは決してありません。

+0

私はこのように考えなかった!これは実際に感覚を覚えています。 将来のSO訪問者を支援するためにすべてのユーザー(初心者も)に感謝した場合、私はこの回答を受け入れています。 – cimecut

+0

"Never"は強力な声明ですが、私はその精神に同意します:あなたの思考が既存のデータベーススキーマによって鉄道に晒されないようにしてください。 – sleske

+0

あなたは反例を考えることができます... –

関連する問題