Files
hibernate-demo/src/test/java/com/ankurm/hibernatedemo/mappingstyle/OrmXmlMappingResourcesTest.java
T

57 lines
2.3 KiB
Java
Executable File

package com.ankurm.hibernatedemo.mappingstyle;
import static org.assertj.core.api.Assertions.assertThat;
import com.ankurm.hibernatedemo.HibernateDemoApplication;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
/**
* Proves that {@code spring.jpa.mapping-resources} is the Spring Boot 4.1.1 wiring that makes
* an orm.xml-only mapping (no {@code @Entity} at all) a real managed JPA entity, backed by a
* table ({@code xml_only_widgets}) that ONLY orm.xml knows about.
*
* <p>Docs: docs/04-annotations-vs-xml.md, Topic 1.
*/
@SpringBootTest(classes = HibernateDemoApplication.class)
@TestPropertySource(properties = {
"spring.jpa.mapping-resources=orm-xml-only-mapping.xml"
})
class OrmXmlMappingResourcesTest {
@Autowired
private EntityManagerFactory emf;
@Test
void ormXmlOnlyEntity_isManaged_andRoundTripsThroughItsOwnTable() {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
OrmXmlOnlyEntity e = new OrmXmlOnlyEntity("mapped-by-orm-xml-only");
em.persist(e);
em.getTransaction().commit();
Long id = e.getId();
em.close();
assertThat(id).isNotNull();
EntityManager em2 = emf.createEntityManager();
// This JPQL uses the entity name (defaults to simple class name) -- proves the entity is
// registered in metadata purely via orm.xml, with zero annotations on the Java class.
List<OrmXmlOnlyEntity> found = em2.createQuery(
"select o from OrmXmlOnlyEntity o where o.label = :label", OrmXmlOnlyEntity.class)
.setParameter("label", "mapped-by-orm-xml-only")
.getResultList();
em2.close();
assertThat(found).hasSize(1);
assertThat(found.get(0).getId()).isEqualTo(id);
System.out.println("RESULT[orm-xml-only]: persisted+queried id=" + id
+ " via JPQL against entity mapped ENTIRELY by orm.xml (table xml_only_widgets), zero annotations on the Java class.");
}
}