по умолчанию для exclude-unlisted-classes установлено значение false в среде Java SE - PullRequest
0 голосов
/ 26 февраля 2020

Я заметил особенность при настройке персистентности JPA. xml для Java приложения. Мои объекты автоматически сканируются, даже если они не находятся в моем пакете root, и у меня не установлено значение exclude-unlisted-class в false (плюс, я использую Java SE, поэтому этот тег не должен работать в любом случае) ).

Вот мой pom. xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>code</artifactId>
        <groupId>org.example</groupId>
        <version>1.1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>jpa</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>${h2.version}</version>
        </dependency>
    </dependencies>

    <properties>
        <hibernate.version>5.4.12.Final</hibernate.version>
        <h2.version>1.4.200</h2.version>
    </properties>
</project>

Родитель определяет только зависимости java version (11) и JUnit и AssertJ.

Что касается моей настойчивости. xml, вот она:

<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"
             version="2.2">
    <persistence-unit name="guide-to-jpa-with-hibernate">
        <properties>
            <!-- Database configuration -->
            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:"/>
            <property name="javax.persistence.jdbc.user" value="user"/>
            <property name="javax.persistence.jdbc.password" value="password"/>

            <!-- Schema configuration -->
            <property name="javax.persistence.schema-generation.database.action" value="create"/>
        </properties>
    </persistence-unit>
</persistence>

Наконец, вот тест, который я выполнил:

class MinimalConfigurationUnitTest {

    @Test
    void givenMinimalConfiguration_whenFindEntity_thenFound() {
        EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("guide-to-jpa-with-hibernate");
        EntityManager entityManager = entityManagerFactory.createEntityManager();
        entityManager.getTransaction().begin();

        Student student = new Student();
        student.setId(1L);

        entityManager.persist(student);
        entityManager.getTransaction().commit();
        entityManager.clear();

        Student foundStudent = entityManager.find(Student.class, 1L);

        assertThat(foundStudent.id()).isEqualTo(student.id());

        entityManager.close();
    }
}

И он проходит.

Однако , если я установлю исключение-не перечисленные-классы в true в моем постоянстве. xml, тест не пройден. Итак, я понимаю, что Hibernate интерпретирует этот тег даже в Java SE, что не является проблемой. Но все же этот тег по умолчанию должен иметь значение true, а не false.

Кто-нибудь может знать, в чем здесь проблема?

...