2009-08-13 2 views
3

スタンドアロンまたはより大きなアプリケーションで使用できるコンポーネントを作成する必要があります。スタンドアロンで使用する場合は、データベースやORM関連の依存関係も必要ありません。より大きなアプリの一部として使用される場合、クラスのいくつかはJPA/Hibernateを介してデータベースに永続化されます。JPA /休止状態:注釈のない親と子どもを持つ子を持つことができます

コンポーネント内のドメインオブジェクトにはアノテーションはありません(ORM関連の依存関係がないという要件があるため)。大規模なアプリケーションでは、私はそれらのドメインオブジェクトをサブクラス化するだろう...それは私が作った限りである。

通常、フィールドレベルの注釈を使用します。上記のシナリオで期限を迎えることは可能ですか?私はそうではないと思っています。

もう1つは、プロパティに注釈を付ける必要があると思いました。その場合、私は非注釈付きドメインオブジェクトを拡張し、すべてのプロパティをオーバーライドします。&これらに注釈を付けます。子は必要な注釈を持つ代理人に過ぎません。これは多くの仕事/コードのように思えます。

皮肉なことに、私が最近離れたhbm.xmlを使用していた場合、これはもっと簡単に実行できると思います。注釈付きのものがありませんか?

答えて

3

JPAアノテーションは実際にあなたの唯一の依存関係です。誰かがあなたのオブジェクトをPOJO(非DB)方法で使用している場合、JPAアノテーションjarが必要です。ほとんどのアプリケーションサーバーでは実際にはクラスパス上にあります。

依存関係として注釈を付けるだけでかなり合理的ですが、休止状態全体でドラッグする必要はなく、多くの友達です。

もう1つは、このエンティティにhbmを使用することです。休止状態は1つのSessionFactoryにアノテーションとhbmスタイルのエンティティを混在させても大丈夫ですが、フィールドアクセスを使用できるので、クラスへのパブリックインターフェイスを妥協する必要はありません。

+0

エンベロープの履歴/監査トラッキングにもEnverを使用しており、現在は注釈が必要なため、hbm.xml形式を使用することはできません。 私は戻って、依存性を最小限に抑えようとするのがおそらく最善のアプローチだと考えています。私はちょうど私が他の簡単/賢明な解決策を見落としていたと思っていた。 –

0

依存関係のないため、要件が厳しいであれば、私はそれを次、 回避さえ注釈依存示唆しています。

私はドメインオブジェクトをサブクラス化せず、に注釈を付けるだけです。 私はこれが助けてくれる以上のトラブルであると信じています。
サブクラス化は1つのエンティティでは簡単ですが、参照されたエンティティでは乱雑になります。 (彼らが継承されないので)あなたは私のためになど

をすべてのエンティティをサブクラス化する必要があり、すべてのコンストラクタをやり直し、XML設定は、この場合にも収まります。 注釈を好む人もいますが、xmlはまだ有効です。 火災試験済みで、よく文書化されており、よく知られており、容易に入手できます。

実際にxmlを書いたくない場合は、理想的にはデータベースからHibernateToolsを使用して生成することができます(他のオプションも可能ですが、ツールは汎用性があります)。

注釈の必要性が非常に強い場合は、コード生成を参照してください。 私は通常、アノテーションを使って自分のドメインオブジェクトを作成します。 それから、注釈を削除するだけで、それからクラスの非注釈付きバージョンを生成します。

クラスが異なる場合は、これが残りのコードに影響する可能性があります。彼らは同じフルネームを持っている(ただし、与えられた設定では1つだけが提供されている)場合は、あなたのコードを各バージョンに対してコンパイルするでしょう...再コンパイルせずにどちらかを使う必要がある場合、アノテーションが必要)...

関連する問題