{{ Identifiable.getJavaType() }} returns the {{@ IdClass }} member type rather than {{ Entity }} class member type. Equivalently, the {{ Attribute#getMember() }} method gives unexpected output as well.
{code:java} public class IdClassAssociationMetamodelTest extends BaseEntityManagerFunctionalTestCase {
@Entity @IdClass(EntityType.EntityId.class) public static class EntityType { @Id private Long key2; @Id @ManyToOne private SomeAssociationType key1;
public static class EntityId implements Serializable { private Long key1, key2; } }
@Entity public static class SomeAssociationType { @Id private Long id; }
@Override protected Class<?>[] getAnnotatedClasses() { return new Class<?>[] { EntityType.class, SomeAssociationType.class }; }
@Test public void idClassAttributeIsProperlyRepresentedInMetamodelTest() { doInJPA( this::entityManagerFactory, entityManager -> { javax.persistence.metamodel.EntityType<EntityType> entity = entityManager.getMetamodel() .entity( EntityType.class );
SingularAttribute<? super EntityType, ?> key1 = entity.getSingularAttribute( "key1" ); assertEquals( SomeAssociationType.class, key1.getJavaType() ); // Fails because Long is returned assertEquals( SomeAssociationType.class, key1.getType().getJavaType() ); } ); } }
{code} |
|