3

いくつかのエンティティを共有する 2 つの異なるプロジェクトのマッピングを行う方法を考え出そうとしています。これらはマッピングの限られたサブセットのみを共有するため、私の最初のアイデアは、これらのマッピングを別の jar に分離することでした。マッピングを行うために hibernate アノテーションを使用しています (したがって、それらは個別の XML ではなく、クラス ファイル内にあります)。

プロジェクト A とプロジェクト B の両方が、このマッピング プロジェクトに依存しています。このプロジェクトには、休止状態のマッピングが 2 つしか含まれていません。プロジェクト A には独自のマッピングはありませんが、プロジェクト B にはマッピングがあります。マッピング プロジェクトの永続化ユニットを構成しないと、マッピングが取得されないため、これを行うと常に問題が発生するようです。プロジェクト B についても同様です。マッピング プロジェクトで永続化ユニットを構成すると、プロジェクト A は機能しますが、プロジェクト B でクエリを実行すると、次のようになります (Mappingたまたまクラスの名前になります)。

java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: Mapping is not mapped

これは、プロジェクト B が独自の永続化ユニットを持っていることが原因であると考えており、明らかに 2 つがマージされていません。私は本当にそれらのいずれかを望んでいません。プロジェクト A/B で 1 つだけを構成し、依存する jar では構成したくないのです。依存関係の jar 内の注釈をスキャンしてマップし、それらを現在の永続化ユニットに追加するように hibernate に指示する方法はありますか?

4

1 に答える 1

2

Springを使用しているかどうかはわかりませんが、Spring の機能を使用します

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="mappingLocations">
        <util:list>
            <value>classpath:br/com/ar/model/repository/hql.ar.hbm.xml</value>
            <value>classpath:br/com/br/model/repository/hql.br.hbm.xml</value>
            <value>classpath:br/com/cr/model/repository/hql.cr.hbm.xml</value>
        </util:list>
    </property>
    <property name="packagesToScan">
        <util:list>
            <value>br.com.ar.model.domain</value>
            <value>br.com.br.model.domain</value>
            <value>br.com.cr.model.domain</value>
        </util:list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
            <prop key="hibernate.connection.charSet">UTF-8</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.validator.autoregister_listeners">false</prop>
        </props>
    </property>
</bean>

私はそれが役に立つことを願っています

アップデート

JPA仕様による

持続性ユニットによって管理される管理持続性クラスのセットは、次の 1 つ以上を使用して定義されます

  • 1 つ以上のオブジェクト/リレーショナル マッピング XML ファイル
  • クラスを検索する 1 つ以上の jar ファイル
  • クラスの明示的なリスト
  • 持続性ユニットのルートに含まれるアノテーション付き管理持続性クラス ( exclude-unlisted-classes 要素が指定されていない場合)

次のように

<persistence>
    <persistence-unit name="titan">
        <!--Explicity list of classes-->
        <class>br.com.ar.model.domain.A</class>
        <class>br.com.ar.model.domain.B</class>
        <!--Set up any jar file by using jar-file element-->
        <!--Its value is a path relative to the JAR file that contains persistence.xml-->
        <jar-file>../lib/customer.jar</jar-file>
        <!--ORM mapping file-->
        <!--It may be present anywhere on the class path-->
        <mapping-file>mapping.xml</mapping-file>
        <properties>
            Properties goes here
        </properties>
    </persistence-unit>
</persistence>
于 2010-08-03T10:53:42.793 に答える