Is there a way to scan JPA entities not to declare persistent classes in a persistence.xml file?

StackOverflow https://stackoverflow.com/questions/17951297

  •  04-06-2022
  •  | 
  •  

Question

I would like to take advantage of JPA @Entity annotations not to declare class entities a J2SE persistence.xml file. What I'd like to avoid :

<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>

and here is what my actual persistence.xml look alike

    <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>

Is there a standard way to scan JPA entities in a persistence.xml file from within a JAR module? Is there a unstandard Hibernate way to scan JPA entities in a persistence.xml file from within a JAR module?

Was it helpful?

Solution

-Make sure your entities and persistence.xml end up in the same classpath when you build your jar.

The entities cannot be scanned if they are sitting in another classpath. If you need to have them sitting in different classpaths, heres one trick I've seen to make it work: No autodetection of JPA Entities in maven-verify.

If you are unsure where things are ending, you can unzip the .jar file and peak. This is an unpacked persistence web project:

Unpacked Web Persistence JAR

Notice my classes are down the com directory, and my persistence.xml is in the META-INF directory. Both are in the same 'classes' classpath, so autoscan will work.

-Set hibernate.archive.autodetection property.

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

-Add false to the persistence-unit

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

Hopefully one of those will work for you.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top