[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