diff --git a/tooling/metamodel-generator/src/test/java/org/hibernate/jpamodelgen/test/embeddable/EmbeddableTypeUseTest.java b/tooling/metamodel-generator/src/test/java/org/hibernate/jpamodelgen/test/embeddable/EmbeddableTypeUseTest.java new file mode 100644 index 0000000000..43c1cd008e --- /dev/null +++ b/tooling/metamodel-generator/src/test/java/org/hibernate/jpamodelgen/test/embeddable/EmbeddableTypeUseTest.java @@ -0,0 +1,35 @@ +/* + * 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 . + */ +package org.hibernate.jpamodelgen.test.embeddable; + +import org.hibernate.jpamodelgen.test.util.CompilationTest; +import org.hibernate.jpamodelgen.test.util.TestForIssue; +import org.hibernate.jpamodelgen.test.util.TestUtil; +import org.hibernate.jpamodelgen.test.util.WithClasses; +import org.junit.Test; + +import static org.hibernate.jpamodelgen.test.util.TestUtil.assertAttributeTypeInMetaModelFor; +import static org.hibernate.jpamodelgen.test.util.TestUtil.assertMetamodelClassGeneratedFor; + +/** + * @author Chris Cranford + */ +@TestForIssue(jiraKey = "HHH-12612") +public class EmbeddableTypeUseTest extends CompilationTest { + @Test + @WithClasses({SimpleEntity.class}) + public void testAnnotatedEmbeddable() { + System.out.println( TestUtil.getMetaModelSourceAsString( SimpleEntity.class ) ); + assertMetamodelClassGeneratedFor( SimpleEntity.class ); + assertAttributeTypeInMetaModelFor( + SimpleEntity.class, + "simpleEmbeddable", + SimpleEmbeddable.class, + "Wrong type for embeddable attribute." + ); + } +} diff --git a/tooling/metamodel-generator/src/test/java/org/hibernate/jpamodelgen/test/embeddable/SimpleEmbeddable.java b/tooling/metamodel-generator/src/test/java/org/hibernate/jpamodelgen/test/embeddable/SimpleEmbeddable.java new file mode 100644 index 0000000000..9f536a3370 --- /dev/null +++ b/tooling/metamodel-generator/src/test/java/org/hibernate/jpamodelgen/test/embeddable/SimpleEmbeddable.java @@ -0,0 +1,45 @@ +/* + * 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 . + */ +package org.hibernate.jpamodelgen.test.embeddable; + +import java.io.Serializable; +import java.util.Objects; + +import javax.persistence.Embeddable; + +/** + * @author Chris Cranford + */ +@Embeddable +public class SimpleEmbeddable implements Serializable { + private String data; + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + @Override + public boolean equals(Object o) { + if ( this == o ) { + return true; + } + if ( o == null || getClass() != o.getClass() ) { + return false; + } + SimpleEmbeddable that = (SimpleEmbeddable) o; + return Objects.equals( data, that.data ); + } + + @Override + public int hashCode() { + return Objects.hash( data ); + } +} diff --git a/tooling/metamodel-generator/src/test/java/org/hibernate/jpamodelgen/test/embeddable/SimpleEntity.java b/tooling/metamodel-generator/src/test/java/org/hibernate/jpamodelgen/test/embeddable/SimpleEntity.java new file mode 100644 index 0000000000..a61944a331 --- /dev/null +++ b/tooling/metamodel-generator/src/test/java/org/hibernate/jpamodelgen/test/embeddable/SimpleEntity.java @@ -0,0 +1,53 @@ +/* + * 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 . + */ +package org.hibernate.jpamodelgen.test.embeddable; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import javax.persistence.Embedded; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +/** + * @author Chris Cranford + */ +@Entity +public class SimpleEntity { + @Id + @GeneratedValue + private Integer id; + + @NotNullAllowed + @Embedded + private SimpleEmbeddable simpleEmbeddable; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public SimpleEmbeddable getSimpleEmbeddable() { + return simpleEmbeddable; + } + + public void setSimpleEmbeddable(SimpleEmbeddable simpleEmbeddable) { + this.simpleEmbeddable = simpleEmbeddable; + } + + // represents a mock TYPE_USE based annotation + @Target({ ElementType.TYPE_USE }) + @Retention(RetentionPolicy.RUNTIME) + public @interface NotNullAllowed { + } +}