2011-02-04 8 views
1

私の質問はちょっと難しいので、私はできるだけシンプルにしようと考えています。2つのパーシスタンスユニット間のHibernateリンク?

私は2つのプロジェクト:ProjectjetとProjectBを持っています。

<persistence-unit name="ProjectAUnit" transaction-type="RESOURCE_LOCAL"> 
     <class>com.projectA.Client</class> 
     <class>com.projectA.InterventionA</class> 
    </persistence-unit> 

InterventionAは、クライアントエンティティとOneToOne関係を持っています

PROJECTAは、以下のpersistence.xmlのファイルを持っています。

<persistence-unit name="projectBUnit" transaction-type="RESOURCE_LOCAL"> 
     <class>com.projectB.InterventionB</class> 
     <class>com.projectB.InterventionOrder</class> 
</persistence-unit> 

InterventionBがInterventionAクラスを拡張(.jarファイルの依存関係に含まれている):

ProjectBのは、以下のpersistence.xmlのファイル有する

すべての3つのクラスをInterventionA、InterventionBクライアントは、同じMySQLスキーマ(schema1)で定義されています。

BUT InterventionBは、別のMySQLスキーマ(SCHEMA2)で定義されInterventionOrderエンティティと@OneToOne関係を有しています。 プライベート介入オーダー介入者;私は次の例外を取得しています

org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com.projectA.InterventionA.client references an unknown entity: com.projectA.Client 

だからここは私の質問です:私は休止状態/ Springとさえ可能達成しようとしていますなぜですか?もしそうなら、どのように? :-) ご協力いただきありがとうございます。

答えて

1

InterventionBは、InterventionAからのClientとClientの間の1対1の関係を継承しています。関係を定義できるようにするには、プロジェクトBのクライアントがマップされていないため、ターゲットエンティティをマップする必要があります。プロジェクトBはプロジェクトAに依存しているため、単にプロジェクトBのpersistence.xmlにターゲットエンティティを追加できます。

<persistence-unit name="projectBUnit" transaction-type="RESOURCE_LOCAL"> 
    <class>com.projectB.InterventionB</class> 
    <class>com.projectB.InterventionOrder</class> 

    <class>com.projectA.Client</class> 
</persistence-unit> 
+0

@ russ-hayward:回答ありがとうございます。 @OneToOne(optional = false)@JoinColumn(name = "ID_INTER")プライベート介入の介入; '次の例外が発生しました:_" com.mysql.jdbc.exceptions.jdbc4 .MySQLSyntaxErrorException:テーブル 'projectBPersistenceUnit.intervention'が存在しません "_。代わりに、ProjectAの永続ユニットに介入する必要があります。それをどうすれば実現できますか?前もって感謝します。 – kiwifrog

+0

InterventionAはProjectBにマップされていないため、Hibernateは関連付けをマップできません。私は、Hibernateがマップされたクラスを検索して、どのクラスがInterventionを実装しているか、InterventionBのみを見つけて使用しているかを確認していると思われます。プロジェクトBのInterventionAをマッピングし、次に@OneToOne(オプション= false、targetEntity = InterventionA.class)を指定することで修正できます。それがうまくいかない場合は、誰かが解決策を知っているかどうかを確認するために新しい質問を開始することが最善の方法かもしれません。 –

+0

あなたの答えのためのThnaks Russ。 – kiwifrog

関連する問題