Skip to content

Commit a4233cf

Browse files
mbelladesebersole
authored andcommitted
HHH-18683 Add test for issue
1 parent 539e270 commit a4233cf

File tree

2 files changed

+172
-53
lines changed

2 files changed

+172
-53
lines changed

hibernate-core/src/test/java/org/hibernate/orm/test/jpa/compliance/GetJavaTypeTest.java

Lines changed: 0 additions & 53 deletions
This file was deleted.
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.jpa.compliance;
6+
7+
import jakarta.persistence.Embeddable;
8+
import jakarta.persistence.Embedded;
9+
import jakarta.persistence.Entity;
10+
import jakarta.persistence.Id;
11+
import jakarta.persistence.MappedSuperclass;
12+
import jakarta.persistence.metamodel.Attribute;
13+
import jakarta.persistence.metamodel.ManagedType;
14+
import jakarta.persistence.metamodel.MappedSuperclassType;
15+
import jakarta.persistence.metamodel.Metamodel;
16+
import org.hibernate.engine.spi.SessionFactoryImplementor;
17+
import org.hibernate.metamodel.model.domain.EmbeddableDomainType;
18+
import org.hibernate.metamodel.model.domain.EntityDomainType;
19+
import org.hibernate.metamodel.model.domain.JpaMetamodel;
20+
import org.hibernate.metamodel.model.domain.ManagedDomainType;
21+
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
22+
import org.hibernate.testing.orm.junit.Jira;
23+
import org.hibernate.testing.orm.junit.Jpa;
24+
import org.junit.jupiter.api.Test;
25+
26+
import static org.assertj.core.api.Assertions.assertThat;
27+
import static org.junit.jupiter.api.Assertions.assertEquals;
28+
import static org.junit.jupiter.api.Assertions.assertNotNull;
29+
import static org.junit.jupiter.api.Assertions.fail;
30+
31+
@Jpa(annotatedClasses = {
32+
MetamodelTypesTest.BaseEntity.class,
33+
MetamodelTypesTest.Person.class,
34+
MetamodelTypesTest.Order.class,
35+
})
36+
@Jira( "https://hibernate.atlassian.net/browse/HHH-18683" )
37+
public class MetamodelTypesTest {
38+
@Test
39+
public void getJavaType(EntityManagerFactoryScope scope) {
40+
scope.inEntityManager( entityManager -> {
41+
final Metamodel metaModel = entityManager.getMetamodel();
42+
final ManagedType<Person> mTypeOrder = metaModel.managedType( Person.class );
43+
assertNotNull( mTypeOrder );
44+
final Attribute<Person, ?> attrib = mTypeOrder.getDeclaredAttribute( "age" );
45+
assertNotNull( attrib );
46+
final Class<?> pAttribJavaType = attrib.getJavaType();
47+
assertEquals( "int", pAttribJavaType.getName() );
48+
} );
49+
}
50+
51+
@Test
52+
public void entityTypeTest(EntityManagerFactoryScope scope) {
53+
scope.inEntityManager( entityManager -> {
54+
final JpaMetamodel jpaMetamodel = entityManager.getEntityManagerFactory()
55+
.unwrap( SessionFactoryImplementor.class ).getJpaMetamodel();
56+
57+
// Existing entity type
58+
final EntityDomainType<Person> personType = jpaMetamodel.entity( Person.class );
59+
assertThat( personType ).isNotNull().isSameAs( jpaMetamodel.findEntityType( Person.class ) )
60+
.extracting( EntityDomainType::getName ).isEqualTo( "Person" );
61+
assertThat( jpaMetamodel.entity( Person.class.getName() ) ).isSameAs(
62+
jpaMetamodel.findEntityType( Person.class.getName() ) ).isSameAs( personType );
63+
64+
// Nonexistent entity type
65+
assertThat( jpaMetamodel.findEntityType( Order.class ) ).isNull();
66+
assertThat( jpaMetamodel.findEntityType( "AnotherEntity" ) ).isNull();
67+
try {
68+
jpaMetamodel.entity( "AnotherEntity" );
69+
fail( "Expected IllegalArgumentException for nonexistent entity type" );
70+
}
71+
catch (IllegalArgumentException e) {
72+
assertThat( e ).hasMessageContaining( "Not an entity" );
73+
}
74+
try {
75+
jpaMetamodel.entity( Order.class.getName() );
76+
fail( "Expected IllegalArgumentException for embeddable type requested as entity" );
77+
}
78+
catch (IllegalArgumentException e) {
79+
assertThat( e ).hasMessageContaining( "Not an entity" );
80+
}
81+
} );
82+
}
83+
84+
@Test
85+
public void mappedSuperclassTypeTest(EntityManagerFactoryScope scope) {
86+
scope.inEntityManager( entityManager -> {
87+
final JpaMetamodel jpaMetamodel = entityManager.getEntityManagerFactory()
88+
.unwrap( SessionFactoryImplementor.class ).getJpaMetamodel();
89+
90+
// Existing mapped superclass type
91+
final ManagedDomainType<BaseEntity> baseEntityType = jpaMetamodel.managedType( BaseEntity.class );
92+
assertThat( baseEntityType ).isInstanceOf( MappedSuperclassType.class )
93+
.isSameAs( jpaMetamodel.findManagedType( BaseEntity.class ) )
94+
.extracting( ManagedDomainType::getTypeName ).isEqualTo( BaseEntity.class.getName() );
95+
assertThat( jpaMetamodel.managedType( BaseEntity.class.getName() ) ).isSameAs(
96+
jpaMetamodel.findManagedType( BaseEntity.class.getName() ) ).isSameAs( baseEntityType );
97+
98+
// Nonexistent mapped superclass type
99+
assertThat( jpaMetamodel.findManagedType( MetamodelTypesTest.class ) ).isNull();
100+
assertThat( jpaMetamodel.findManagedType( "AnotherEntity" ) ).isNull();
101+
try {
102+
jpaMetamodel.managedType( "AnotherEntity" );
103+
fail( "Expected IllegalArgumentException for nonexistent entity type" );
104+
}
105+
catch (IllegalArgumentException e) {
106+
assertThat( e ).hasMessageContaining( "Not a managed type" );
107+
}
108+
try {
109+
jpaMetamodel.managedType( MetamodelTypesTest.class );
110+
fail( "Expected IllegalArgumentException for embeddable type requested as entity" );
111+
}
112+
catch (IllegalArgumentException e) {
113+
assertThat( e ).hasMessageContaining( "Not a managed type" );
114+
}
115+
} );
116+
}
117+
118+
@Test
119+
public void embeddableTypeTest(EntityManagerFactoryScope scope) {
120+
scope.inEntityManager( entityManager -> {
121+
final JpaMetamodel jpaMetamodel = entityManager.getEntityManagerFactory()
122+
.unwrap( SessionFactoryImplementor.class ).getJpaMetamodel();
123+
124+
// Existing mapped superclass type
125+
final EmbeddableDomainType<Order> embeddableType = jpaMetamodel.embeddable( Order.class );
126+
assertThat( embeddableType ).isNotNull().isSameAs( jpaMetamodel.findEmbeddableType( Order.class ) )
127+
.extracting( ManagedDomainType::getTypeName ).isEqualTo( Order.class.getName() );
128+
assertThat( jpaMetamodel.embeddable( Order.class.getName() ) ).isSameAs(
129+
jpaMetamodel.findEmbeddableType( Order.class.getName() ) ).isSameAs( embeddableType );
130+
131+
// Nonexistent mapped superclass type
132+
assertThat( jpaMetamodel.findEmbeddableType( BaseEntity.class ) ).isNull();
133+
assertThat( jpaMetamodel.findEmbeddableType( "AnotherEmbeddable" ) ).isNull();
134+
try {
135+
jpaMetamodel.embeddable( "AnotherEmbeddable" );
136+
fail( "Expected IllegalArgumentException for nonexistent entity type" );
137+
}
138+
catch (IllegalArgumentException e) {
139+
assertThat( e ).hasMessageContaining( "Not an embeddable" );
140+
}
141+
try {
142+
jpaMetamodel.embeddable( Person.class );
143+
fail( "Expected IllegalArgumentException for embeddable type requested as entity" );
144+
}
145+
catch (IllegalArgumentException e) {
146+
assertThat( e ).hasMessageContaining( "Not an embeddable" );
147+
}
148+
} );
149+
}
150+
151+
@MappedSuperclass
152+
public static abstract class BaseEntity {
153+
@Id
154+
private int id;
155+
}
156+
157+
@Entity(name = "Person")
158+
public static class Person extends BaseEntity {
159+
private String name;
160+
161+
private int age;
162+
163+
@Embedded
164+
private Order order;
165+
}
166+
167+
@Embeddable
168+
public static class Order {
169+
private Integer number;
170+
private String item;
171+
}
172+
}

0 commit comments

Comments
 (0)