[hibernate-dev] HHH-5024 : MappedSuperclass and Static Metamodel Generator
Steve Ebersole
steve at hibernate.org
Mon Jan 9 16:06:51 EST 2012
There is definitely an issue here. The code in HEM is just wrong. I am
not familiar enough with the code/spec here in regards to static
metamodel generation to determine the appropriate fix on my own.
The model in question there is essentially:
@MappedSuperclass
abstract class AbstractAttribute {
protected String key;
protected String value;
public abstract String getOwner();
@Column(name = "attribute_key")
public String getKey() { return key; }
@Column(name = "attribute_value")
public String getValue() { return value; }
// setters
}
then we have:
@Entity
public class ProductAttribute extends AbstractAttribute {
private String owner;
@Id @Column(name = "owner")
public String getOwner() { return owner; }
@Id @Column(name = "attribute_key")
public String getKey() { return key; }
// setters
}
The attributes in question are the 2 (key,owner) that get overridden in
the subclass. We end up with a mismatch.
The metamodel generator does:
@StaticMetamodel(AbstractAttribute.class)
public abstract class AbstractAttribute_ {
public static volatile SingularAttribute<AbstractAttribute, Integer> owner;
public static volatile SingularAttribute<AbstractAttribute, String> value;
public static volatile SingularAttribute<AbstractAttribute, String> key;
}
@StaticMetamodel(ProductAttribute.class)
public abstract class ProductAttribute_ extends AbstractAttribute_ {
}
In the type system however only value shows up as "declared" by
AbstractAttribute. These other 2 show up as being declared by
ProductAttribute, presumably because that is where there ultimate
metadata is defined.
I think the metamodel is defined correctly, but then that leaves a
question as to how we handle that for the type system
(org.hibernate.mapping.MappedSuperclass).
--
steve at hibernate.org
http://hibernate.org
More information about the hibernate-dev
mailing list