Hibernate: автоматическая загрузка классов, помеченных как @Entity из jar из другого пути к классам - PullRequest
0 голосов
/ 23 мая 2018

У меня есть приложение (.war), которое использует объекты из другого файла JAR из другого пути к классам.Мой persistance.xml выглядит как

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

    <persistence-unit name="EAP" transaction-type="JTA">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>java:/pscDataSource2</jta-data-source>

        <class>com.myPackage.entity.MyEntity</class>

        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
            <property name="hibernate.jdbc.batch_size" value="50" />
            <property name="hibernate.show_sql" value="false" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.generate_statistics" value="false" />
            <property name="hibernate.id.new_generator_mappings" value="false" />
            <property name="hibernate.ejb.interceptor" value="com.myPackage.interceptor.DelegatingInterceptor" />
        </properties>
    </persistence-unit>

</persistence>

С этим XML-файлом я успешно загружаю класс MyEntity .Однако я бы хотел избежать перечисления всех необходимых классов в файле persistance.xml.Я обнаружил, что <property name="hibernate.archive.autodetection" value="class, hbm" /> Но при таком подходе мне нужно перечислить jar-файлы, из которых я хочу загружать сущности.Таким образом, мой файл persistance.xml теперь выглядит как показано ниже и работает нормально

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

    <persistence-unit name="EAP" transaction-type="JTA">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>java:/pscDataSource2</jta-data-source>

        <jar-file>lib/myJar.jar</jar-file> //new line

        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
            <property name="hibernate.jdbc.batch_size" value="50" />
            <property name="hibernate.show_sql" value="false" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.generate_statistics" value="false" />
            <property name="hibernate.id.new_generator_mappings" value="false" />
            <property name="hibernate.ejb.interceptor" value="com.myPackage.interceptor.DelegatingInterceptor" />
            <property name="hibernate.archive.autodetection" value="class, hbm" /> //new line
        </properties>
    </persistence-unit>

</persistence>

Вопрос: Можно ли каким-либо образом загружать сущности из jar-файлов, не перечисляя их вообще, если у меня есть зависимости от нихиз моего приложения?Я не использую Spring

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Согласно поддержке Red Hat пустое свойство <jar-file></jar-file> является решением.Меня устраивает.Так что теперь мой файл persistence.xml выглядит как

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

    <persistence-unit name="EAP" transaction-type="JTA">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>java:/pscDataSource2</jta-data-source>

        <jar-file></jar-file> //fix

        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
            <property name="hibernate.jdbc.batch_size" value="50" />
            <property name="hibernate.show_sql" value="false" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.generate_statistics" value="false" />
            <property name="hibernate.id.new_generator_mappings" value="false" />
            <property name="hibernate.ejb.interceptor" value="com.myPackage.interceptor.DelegatingInterceptor" />
        </properties>
    </persistence-unit>

</persistence>
0 голосов
/ 23 мая 2018

Я использую этот тег в моем файле persistence.xml, и он работал для меня.возможно, вам следует попробовать, потому что я использую eclipselink реализацию JPA

<exclude-unlisted-classes>false</exclude-unlisted-classes>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...