Add Hibernate 7 batches 2-5: mapping styles, JPA annotations, natural IDs, @Immutable, stored procedures, in-memory test databases, JNDI mocking, proxies, associations, temporal mapping and named queries (Hibernate 7.4.5.Final + Spring Boot 4.1.1 + JDK 25)
This commit is contained in:
+56
@@ -0,0 +1,56 @@
|
||||
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.");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user