Как я могу зависеть от отображений аннотированного спящего режима из отдельного проекта? - PullRequest
3 голосов
/ 03 августа 2010

Я пытаюсь понять, как сделать сопоставления для двух разных проектов, которые разделяют некоторые сущности. Так как они имеют только ограниченное подмножество сопоставлений, моей первой идеей было разделить эти сопоставления в отдельную банку. Я использую аннотации hibernate для отображения (поэтому они находятся в файлах классов, а не в отдельном XML).

И проект A, и проект B зависят от этого проекта отображений, который содержит только пару отображений гибернации. Проект A не имеет собственных отображений, но проект B имеет. Что бы я ни делал, это всегда вызывает проблемы, поскольку, если я не настрою модуль персистентности для проекта сопоставлений, сопоставления никогда не будут обнаружены. Аналогично для проекта B. Если я настраиваю единицу сохраняемости в проекте сопоставлений, проект А работает, но выполнение запроса в проекте В просто дает мне (Mapping имя класса):

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

Я полагаю, что это вызвано тем, что у проекта B есть своя единица персистентности, и, очевидно, они не объединяются. Я не очень хочу, чтобы они тоже, я бы предпочел настроить только один в проекте A / B, а не банку, от которой они зависят. Так есть ли способ сообщить hibernate сканировать и отображать аннотации в банке зависимостей и добавлять их в текущий блок персистентности?

1 Ответ

2 голосов
/ 03 августа 2010

Я не знаю, используете ли вы Spring, но я использую возможности Spring. Чтобы получить это поведение, используя свойство packagesToScan среди свойств mappingLocations следующим образом

<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

Набор управляемых классов персистентности, которые управляютсяПерсистентная единица определяется с использованием одного или нескольких из следующих :

  • Один или несколько файлов XML объектного / реляционного отображения
  • Один или несколько банокфайлы, в которых будет выполняться поиск классов
  • Явный список классов
  • Аннотированные управляемые персистентные классы, содержащиеся в корне единицы сохраняемости (, если только элемент 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...