17

私は数年間 Hibernate を使用してきましたが、注釈とコードで接続パラメーターを設定することによってのみ使用しました。

XML ファイルを使用しないことで「何かが足りない」のでしょうか? XML でのみ使用できる重要な機能はありますか? XML を使用することが理にかなっている状況やパターンはありますか?

4

9 に答える 9

7

何も見逃していないと言っても過言ではないと思います。

属性で表現できない XML の機能がある場合 (まれなケースもあると思います)、[RawXml] を使用して XML を属性に書き込むオプションがあります。したがって、機能を見逃すことはありません。

チーム内に個別のファイルを管理することを好むプログラマーが十分にいる場合、または XML マッピングをその場で編集する必要がある場合は、XML を使用するのが理にかなっています。Xml マッピング ファイルは、おそらく非常に複雑なマッピングの操作が簡単で、有用な情報 (フェッチ戦略に関するコメントなど) を含めることができます。

アーキテクチャの問題もあります。マッピングを XML ファイルに分割すると、ビジネス関連のコードとその永続化方法に関する指示をより適切に分離できると主張する人もいます。

于 2009-01-17T02:28:51.870 に答える
6

注釈は、Hibernate をすばやく構成するための優れた方法です。しかし、Hibernate のような OR マッパーの重要な機能の 1 つは、ドメイン モデルを「永続性に関係なく」維持することです。オブジェクトは、永続化される場所と方法について何も知る必要はありません。注釈を使用するとそれが壊れると主張する人もいるかもしれません。そして、永続性が多くの懸念事項の 1 つにすぎない状況では、物事を分離しておくことは理にかなっています。

もう 1 つの理由は、ドメイン オブジェクトがさまざまな状況で異なる方法で保持されることです。複数のデータベースを 1 つのアプリケーションで使用することも、同じドメイン モデルを使用する複数のアプリケーションで使用することもできます。

于 2009-01-17T02:20:09.670 に答える
5

Hibernate は EJB3/JPA 標準アノテーションを使用しませんか? もしそうなら、XML を使用する少なくとも 1 つの理由を思いつくことができます。それらの注釈は、Hibernate のすべての機能を備えているわけではありません。

例: Hibernate は ID の「ネイティブ」タイプを定義できます。これにより、MySQL では自動インクリメント フィールドが作成され、Oracle ではシーケンスが作成されます。両方の状況で機能する JPA アノテーションでこれを行う方法はありません。

また、XML はプラグ可能です。注釈はそうではありません。これは、複数のデータベース プラットフォームに出荷し、それぞれに異なる構成を使用している場合に問題になる可能性があります。

XML は多くの開発者に支持されなくなりました。その理由だけでも、多くの人がアノテーションを支持していると思います。とにかく、XML を (persistence.xml ファイルやその他のファイルの形式で) 持っているということです。それは、1つの6つ、他の6つに少し似ています。

于 2009-01-17T02:11:31.170 に答える
1

XML でできることでアノテーションでできないことはほとんどありません。何も思い浮かびません。JPA に準拠してみることができますが、JPA API はかなり制限されていることがわかりました。それでも、それは非標準の Hibernate 固有の注釈を使用することを意味します。

ハイバネート アノテーションがドメイン モデルを汚染するというコメントがいくつかありますが、いずれにせよ、これらはデータベース レイアウトと密接に結びついています。データベース駆動型ではないコードでは、とにかく中間層を構築する必要があります。実際、多くの Web アプリは、プレゼンテーション層に必要なデータのみをコピーする中間値オブジェクトを使用する必要があります。代わりに、多くのユーザーがビュー アンチパターンで開いているセッションを使用しています。

最後に、xml 構成は柔軟ですが、xml ファイルを編集するときは常に Java ソース ファイルも編集することが一般的です。これは、構成をオブジェクトに近づけるため、つまり注釈に移動するためのもう 1 つの引数です。

于 2009-01-17T13:48:13.043 に答える
0

私が発見したアノテーションの唯一の欠点は、ドメイン モデルのクラスに関連するアノテーションを埋め込む必要があることです。そのため、ドメイン モデルを使用するプログラムはすべて API にアクセスする必要があります。

ただし、さまざまな理由で、ドメインモデルを直接永続化するのではなく、サーバーにのみ永続化される類似の (ただし多少異なる) 「永続ドメインモデル」があるため、これは大きな問題ではありませんでした。

于 2009-01-17T02:45:22.710 に答える
0

構成内に名前付きクエリを含めているかどうかはわかりませんが、エンティティとそのクエリの間でエラーが発生するリスクが生じると考えていても、XML ファイルに入れる傾向があります。アプリケーション全体を再コンパイルすることなく、クエリを調整できます。

エンティティをビジネス レイヤーからプレゼンテーション レイヤーに再利用する場合、注釈の代わりに XML を使用すると、UI レイヤーで JPA 依存関係を回避することもできますが、その引数が適切かどうかはわかりません。

于 2010-03-08T15:17:08.933 に答える
0

私が見つけた 1 つのことは、注釈を使用すると、UUID/GUID 列を XML でマッピングするよりも使いやすくなるように見えることです。しかし、繰り返しになりますが、私は Hibernate を初めて使用します。

于 2011-03-07T21:23:43.943 に答える
0
  • 現在、注釈付きの LiquidBase を使用することはできません。
  • 注釈付きのデータベース オブジェクトを作成することはできません。使用する必要があります。

    cfg.addAuxiliaryDatabaseObject(新しい SimpleAuxiliaryDatabaseObject( ...ここに SQL... ))

いくつかの特別な SQL 命令を作成するため。

于 2012-12-31T14:47:08.167 に答える
0

すでに述べたことを繰り返したくありませんが、XML スタイルの構成を使用して、コードとは別にしています。それは主に私の個人的な好みに合わせて行われ、一日の終わりには問題になりません:) XMLでできるもう1つのことは、hbm2javaにコードを生成させることです。私もこれが好きですが、これもアドバンテージ; おそらくそうではありません。

ですから、どちらを好むかの問題だと思います。

于 2009-01-17T14:42:57.690 に答える