Доступны ли аннотации уровня пакета в EJB3 для сопоставления объектов в JPA/Hibernate?

Проблема:

У меня есть два взаимодополняющих проекта: базовый (базовый проект) с общими объектами и конкретный (конкретный проект), который должен запрашивать объекты из первого проекта.

Они оба получают доступ к одной и той же базе данных, но по разным схемам и с разными пользователями/грантами. Тем не менее, у обоих есть как минимум грант SELECT для общих таблиц.

Я нашел три возможности интегрировать их в файл persistence.xml для конкретного проекта:

  1. Перечислите каждую отдельную сущность из базового проекта, используя теги ‹class› в файле persistence.xml конкретного проекта. Недостаток: каждый раз, когда появляется новая сущность, ее нужно добавлять в конкретный проект, чтобы она была видна.

  2. Добавьте файл «.jar» базового проекта, используя тег ‹jar-file› в файле persistence.xml конкретного проекта. Недостаток: это должен быть реальный путь к файлу jar, который может измениться;

  3. (ЛУЧШЕЕ на данный момент) Добавьте ПАКЕТ сущностей базового проекта в файл persistence.xml, используя тег ‹class›, как описано в документация по установке Hibernate entityManager. Недостаток: нужно использовать аннотации уровня пакета через файл package-info.java, который я нигде не могу найти, как это сделать.

Вопрос:

Кто-нибудь знает, действительно ли можно использовать аннотацию уровня пакета для обозначения пакета сущностей в файле persistence.xml?

В документации Hibernate указано, что это можно сделать, но не сказано, как:

класс

Элемент класса указывает полное имя класса, которое вы будете отображать. По умолчанию все правильно аннотированные классы и все файлы hbm.xml, найденные внутри архива, добавляются в конфигурацию модуля сохраняемости. Однако вы можете добавить некоторую внешнюю сущность через элемент класса. В качестве расширения спецификации вы можете добавить в элемент имя пакета (например, org.hibernate.eg). Внимание, пакет будет включать метаданные, определенные на уровне пакета (т.е. в package-info.java), он не будет включать все классы данного пакета.


person Lucas Fragomeni    schedule 12.02.2010    source источник


Ответы (1)


Как указано в этом отчете об ошибке, он работает правильно. Если вам нужен пример package-info.java, вы можете взглянуть на этот спящий режим сообщение на форуме.

Примечание. Эта функциональность не является частью спецификации, как описано в постоянная XML-схема.

      <xsd:element name="class" type="xsd:string" 
                   minOccurs="0" maxOccurs="unbounded">
        <xsd:annotation>
          <xsd:documentation>

            Class to scan for annotations.  It should be annotated 
            with either @Entity, @Embeddable or @MappedSuperclass.

          </xsd:documentation>
        </xsd:annotation>
      </xsd:element>
person rochb    schedule 12.02.2010