Я заметил особенность при настройке персистентности 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.
Кто-нибудь может знать, в чем здесь проблема?