HHH-18103 Add test for issue

This commit is contained in:
Marco Belladelli 2024-05-23 14:22:15 +02:00
parent ac4931a264
commit 00c7707de0
4 changed files with 77 additions and 18 deletions

View File

@ -7,27 +7,31 @@
package org.hibernate.orm.test.metamodel; package org.hibernate.orm.test.metamodel;
import org.hibernate.testing.TestForIssue; import org.hibernate.metamodel.model.domain.EmbeddableDomainType;
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
import org.hibernate.testing.orm.junit.Jira;
import org.hibernate.testing.orm.junit.Jpa; import org.hibernate.testing.orm.junit.Jpa;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static jakarta.persistence.metamodel.Type.PersistenceType.MAPPED_SUPERCLASS;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertTrue;
@Jpa( @Jpa( annotatedClasses = {
annotatedClasses = {
ProductEntity.class, ProductEntity.class,
LocalizedValue.class,
Company.class,
Address.class,
Person.class, Person.class,
Company.class Measurement.class,
} Height.class,
) } )
public class EmbeddableMetaModelTest { public class EmbeddableMetaModelTest {
@Test @Test
@TestForIssue(jiraKey = "HHH-11111") @Jira( "https://hibernate.atlassian.net/browse/HHH-11111" )
public void testEmbeddableCanBeResolvedWhenUsedAsInterface(EntityManagerFactoryScope scope) { public void testEmbeddableCanBeResolvedWhenUsedAsInterface(EntityManagerFactoryScope scope) {
scope.inTransaction( entityManager -> { scope.inTransaction( entityManager -> {
assertNotNull( entityManager.getMetamodel().embeddable( LocalizedValue.class ) ); assertNotNull( entityManager.getMetamodel().embeddable( LocalizedValue.class ) );
@ -36,13 +40,26 @@ public class EmbeddableMetaModelTest {
} ); } );
} }
@Test @Test
@TestForIssue(jiraKey = "HHH-12124") @Jira( "https://hibernate.atlassian.net/browse/HHH-12124" )
public void testEmbeddableEquality(EntityManagerFactoryScope scope) { public void testEmbeddableEquality(EntityManagerFactoryScope scope) {
scope.inTransaction( entityManager -> { scope.inTransaction( entityManager -> {
assertTrue( entityManager.getMetamodel().getEmbeddables().contains( Company_.address.getType() ) ); assertTrue( entityManager.getMetamodel().getEmbeddables().contains( Company_.address.getType() ) );
assertTrue( entityManager.getMetamodel().getEmbeddables().contains( Person_.address.getType() ) ); assertTrue( entityManager.getMetamodel().getEmbeddables().contains( Person_.height.getType() ) );
} );
}
@Test
@Jira( "https://hibernate.atlassian.net/browse/HHH-18103" )
public void test(EntityManagerFactoryScope scope) {
scope.inTransaction( entityManager -> {
final EmbeddableDomainType<Height> embeddable = (EmbeddableDomainType<Height>) entityManager.getMetamodel()
.embeddable( Height.class );
assertNotNull( embeddable.getSuperType() );
assertEquals( MAPPED_SUPERCLASS, embeddable.getSuperType().getPersistenceType() );
assertEquals( Measurement.class, embeddable.getSuperType().getJavaType() );
assertNotNull( Height_.height );
assertNotNull( Measurement_.unit );
} ); } );
} }
} }

View File

@ -0,0 +1,17 @@
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
*/
package org.hibernate.orm.test.metamodel;
import jakarta.persistence.Embeddable;
/**
* @author Marco Belladelli
*/
@Embeddable
public class Height extends Measurement {
private float height;
}

View File

@ -0,0 +1,25 @@
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
*/
package org.hibernate.orm.test.metamodel;
import jakarta.persistence.MappedSuperclass;
/**
* @author Marco Belladelli
*/
@MappedSuperclass
public abstract class Measurement {
private String unit;
public String getUnit() {
return unit;
}
public void setUnit(String unit) {
this.unit = unit;
}
}

View File

@ -23,7 +23,7 @@ public class Person implements Serializable {
private String name; private String name;
@Embedded @Embedded
private Address address = new Address(); private Height height;
public long getId() { public long getId() {
return id; return id;
@ -41,11 +41,11 @@ public class Person implements Serializable {
this.name = name; this.name = name;
} }
public Address getAddress() { public Height getHeight() {
return address; return height;
} }
public void setAddress(Address address) { public void setHeight(Height height) {
this.address = address; this.height = height;
} }
} }