Есть ли способ сканирования объектов JPA не объявлять постоянные классы в файле persistence.xml?

Я хотел бы использовать аннотации JPA @Entity, чтобы не объявлять сущности класса файл persistence.xml J2SE. Что я хотел бы избежать:

<persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>com.mycompany.entities.Class1</class>
    <class>com.mycompany.entities.Class2</class>
    <class>com.mycompany.entities.Class3</class>
</persistence-unit>

и вот что мой фактический persistence.xml выглядит одинаково

    <persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
        <!-- Scan for annotated classes and Hibernate mapping XML files -->
        <property name="hibernate.archive.autodetection" value="class, hbm" />
        <property name="hibernate.cache.use_second_level_cache" value="false" />
        <property name="hibernate.cache.use_query_cache" value="false" />
        <property name="hibernate.hbm2ddl.auto" value="create-drop" />
    </properties>
</persistence-unit>

Существует ли стандартный способ сканирования объектов JPA в файле persistence.xml из модуля JAR? Существует ли нестандартный способ Hibernate для сканирования объектов JPA в файле persistence.xml из модуля JAR?

Ответ 1

-Убедитесь, что ваши объекты и persistence.xml попадают в один и тот же путь к классам при создании вашей банки.

Объекты не могут быть отсканированы, если они находятся в другом пути к классам. Если вам нужно, чтобы они сидели в разных классах, это один трюк, который я видел, чтобы заставить его работать: Автоматическое определение объектов JPA в maven-verify.

Если вы не знаете, где заканчиваются вещи, вы можете разархивировать файл .jar и пик. Это неуправляемый веб-проект настойчивости:

Unpacked Web Persistence JAR

Обратите внимание, что мои классы находятся в каталоге com, а мой persistence.xml находится в каталоге META-INF. Оба находятся в одном и том же классе классов, поэтому автозапуск будет работать.

-Установить свойство hibernate.archive.autodetection.

<!-- Scan for annotated classes and Hibernate mapping XML files -->
<property name="hibernate.archive.autodetection" value="class, hbm" />

-Добавить false в блок персистентности

<persistence-unit name=...>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
    ...

Надеюсь, один из них будет работать для вас.