|
Missing support for generics is clearly apparent in conjuction with use of @javax.persistence.MappedSuperclass.
Let's have a generic superclass:
@MappedSuperclass
public abstract class HelloWorldSuperclass<KeyType, ValueType> {
@EmbeddedId
private KeyType key;
@Column(name="value")
private ValueType value;
}
Then define type specific subclass:
@Entity
public abstract class HelloWorldInteger extends HelloWorldSuperclass<Integer, String> {
}
And another one for variety sake:
@Entity
public abstract class HelloWorldString extends HelloWorldSuperclass<String, String> {
}
Resulting metamodel classes do not have correct types where expected. All parametrized types are translated to mere Object in superclass and subclasses.
@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(HelloWorldSuperclass.class)
public abstract class HelloWorldSuperclass_ {
public static volatile SingularAttribute<HelloWorldSuperclass, Object> value;
public static volatile SingularAttribute<HelloWorldSuperclass, Object> key;
}
@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(HelloWorldInteger.class)
public abstract class HelloWorldInteger_ extends HelloWorldSuperclass_ {
}
@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(HelloWorldString.class)
public abstract class HelloWorldString_ extends HelloWorldSuperclass_ {
}
This is rather inconvenient and impossible to use reasonably further on in CriteriaBuilder.
Tomas
|