[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