2011-07-05 3 views
0

私はEclipseで開発されたJava/Spring/HibernateベースのWebアプリケーションに取り組んでいます。Hibernateエンティティを外部化する方法は?

このWebアプリケーションは実際には、2つのHibernateエンティティクラスとそれぞれのHibernateリポジトリクラスを複製する2つの異なるプロジェクトです。明らかに、重複したコードを取り出し、それを外部のJARファイルなどに移動するとよいでしょう。

Hibernateのドキュメントから、persistence.xmlファイルを含む新しいJAVAプロジェクトにエンティティクラスを配置するはずです。また、このプロジェクトをJARにエクスポートし、それをメインプロジェクトのクラスパスに含めることもできます。さらに、私は自分のメインプロジェクトのhibernate.cfg.xmlからこのJARを参照することになっていることを知っています。

私が今作業しているプロジェクトでは、それほど単純ではないようです。ここで

質問は以下のとおりです。共有コードを保持している私の外部プロジェクトで

  1. 、私はそれがあまりにも休止状態リポジトリクラスにそれを含めることができますか?もしそれが本当に必要であれば、これはどのようにしてpersistence.xmlに記されていますか?

  2. 私の外部JARで、persistence.xmlの最小の可能性はありますか?例えば、メインプロジェクトはすでにハイバネートの方言を設定しているので、この外部JARのpersistence.xmlから除外することができますか?

  3. Hibernateのドキュメントから、hibernate.cfg.xml<jar-file>タグを使用して外部JARファイルを参照できることがわかりました。では、私のプロジェクトにhibernate.cfg.xmlがないとどうなりますか? Springのコンフィグレーションxmlは、org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBeanannotatedClassesというプロパティを与えています。私はAnnotationSessionFactoryBeanで外部JARファイルを参照する例を見つけるのは大したことではありません。

私はこのサイトを検索しようとしましたが、まだ私を助けてくれるほど類似したものは見つかりませんでした。これが重複した投稿、または愚かな明白な質問なのかどうかお詫び申し上げます。事前:)で

おかげ

EDIT:

OK、それは私が最終的に、私は私のクラスパスに"MY_TEST.jar"、さらに"MY_TEST.jar"一つは注釈を付けた想定を含めました想定される知っておくべきことのように見えるので、 Hibernateクラス:src.shared.myEntity.java

以下のSpring構成の抜粋でこのエンティティクラスを参照する方法はありますか?

<bean id="my.postgres.sessionFactory" 
     class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 

    <property name="dataSource" 
     ref="my.postgres.dataSource" /> 

    <property name="annotatedClasses"> 
     <list> 
     <value>src.app.EntityA</value> 
     <value>src.app.EntityB</value> 
     </list> 
    </property> 
    ......... 
</bean> 

答えて

0

IllegalArgumentException: Cannot find classほとんど関係なく、私がしようとするものになっていない保つ)Hibernateは、リポジトリの概念がありません。 春があります。

Hibernateは、永続エンティティクラスがどこにあるか気にしません。 クラスパス内にある必要があります。 そのすべてです。 2つ、 2つ、 、または3つのjarは、これらのjarがすべてクラスパスにあるかどうかは関係ありません。

あなたのプロジェクトを整理し、クラスパスに2つの異なるハイバネート設定ファイルがないことを確認してください。 私はプロジェクトを使用して、すべての共通エンティティと関連するリポジトリを保持し、メインプロジェクトに休止状態の構成ファイルを定義させます。

共有クラスの完全修飾名がsrc.shared.myEntity、 であれば、春の設定は、次の行が必要:あなたの言葉遣いが混乱して

<property name="annotatedClasses"> 
    <list> 
    ... 
    <value>src.shared.myEntity</value> 
    </list> 
</property> 

を、 ので、私は私が考えられますかどうか確認明らかに、 しかしおそらくそうではありません。 クラスの完全修飾名は、完全なパッケージ名の後に、クラス名、つまり.classまたは.java拡張子を持たない が続きます。 jarには.classファイル( )が含まれていなければなりません。 jar内のディレクトリの階層は、パッケージの階層を正確にマッピングする必要があります。 は、だからあなたのエンティティは次のように見える場合:

package src.shared; 

@Entity 
public class myEntity { 
    // ... 
} 

jarが がmyEntity.classファイルを含むディレクトリshared、 を含む、 、srcディレクトリをそのルートに を持つ必要があります。

PS:ルートパッケージ名としてsrcが本当に奇妙です。 大会を尊重してみませんか:com.yourcompany.yourproject ...?

PPS:クラス名は常に大文字: MyEntityで始まり、myEntityではなく、大文字で始まる必要があります。

+0

お返事ありがとうございます。申し訳ありませんが、私はリポジトリのことを忘れました。 クラスパスに外部jarがありますが、Springの設定でAnnotationSessionFactoryBeanプロパティを使用して参照する際に問題があります。 Hibernateのドキュメントでは、これがhibernate.cfg.xmlファイルでどのように行われたかを明確に示していますが、元のプロジェクトアーキテクトはこれを含めず、Springの設定を通してすべてを構成することにしました。すべてがコンパイルされていますが、Springは外部のEntityクラスを見つけることができません – Langecrew

+0

次に、問題があるSpringの設定を表示し、どの例外が発生するか(スタックトレース)を教えてください。しかし、春は瓶も気にしない。あるクラスがクラスパスにある場合、それを見つけるでしょう。 –

+0

私の元の投稿に編集で投稿 – Langecrew

関連する問題