[hibernate-issues] [Hibernate-JIRA] Created: (HHH-6924) Assertion Failure when building metadata of a class with an Identifier inherited from a MappedSuperclass

Tom Coogan (JIRA) noreply at atlassian.com
Thu Dec 29 10:33:21 EST 2011


Assertion Failure when building metadata of a class with an Identifier inherited from a MappedSuperclass
--------------------------------------------------------------------------------------------------------

                 Key: HHH-6924
                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6924
             Project: Hibernate Core
          Issue Type: Bug
    Affects Versions: 4.0.0.Final
         Environment: Hibernate Core 4.0.0.Final
Hibernate Commons Annotations 4.0.1.Final
PostgreSQL 9.1.2
            Reporter: Tom Coogan
            Priority: Critical


Our model classes inherit their identifiers from a MappedSuperclass as follows:

{code}
@MappedSuperclass
public abstract class GenericModel {

    protected Long id;

    @Id
    @GeneratedValue(generator="postgres-seq")
    @GenericGenerator(name="postgres-seq", strategy = "com.zzz.zzz.util.PostgresSequenceGenerator")
    @Column(name = "id", nullable = false)
    public Long getId() { return this.id; }
    public void setId(Long id) { this.id = id; }
}

@Entity
@Table(name="users")
public class User extends GenericModel {
    ...
}
{code}

When building the metadata for these classes, the following AssertionFailure occurs:

{noformat}
org.hibernate.AssertionFailure: The root entity needs to specify an identifier
	at org.hibernate.metamodel.source.annotations.entity.RootEntitySourceImpl.getIdentifierSource(RootEntitySourceImpl.java:63)
	at org.hibernate.metamodel.source.binder.Binder.bindIdentifier(Binder.java:309)
	at org.hibernate.metamodel.source.binder.Binder.makeRootEntityBinding(Binder.java:183)
	at org.hibernate.metamodel.source.binder.Binder.createBasicEntityBinding(Binder.java:159)
	at org.hibernate.metamodel.source.binder.Binder.doCreateEntityBinding(Binder.java:147)
	at org.hibernate.metamodel.source.binder.Binder.createEntityBinding(Binder.java:132)
	at org.hibernate.metamodel.source.binder.Binder.processEntityHierarchy(Binder.java:108)
	at org.hibernate.metamodel.source.annotations.AnnotationMetadataSourceProcessorImpl.processMappingMetadata(AnnotationMetadataSourceProcessorImpl.java:134)
	at org.hibernate.metamodel.source.internal.MetadataImpl.bindMappingMetadata(MetadataImpl.java:195)
	at org.hibernate.metamodel.source.internal.MetadataImpl.<init>(MetadataImpl.java:165)
	at org.hibernate.metamodel.source.internal.MetadataBuilderImpl.buildMetadata(MetadataBuilderImpl.java:83)
	at org.hibernate.metamodel.MetadataSources.buildMetadata(MetadataSources.java:112)
{noformat}

It appears that this is happening because EntityClass is always instantiated with a null parent from EntityHierarchyBuilder.createEntityHierarchies(AnnotationBindingContext bindingContext) line 105:

{code}
EntityClass rootEntityClass = new EntityClass(
    rootClassInfo,
    null,
    defaultAccessType,
    hierarchyInheritanceType,
    bindingContext
);
{code}

and therefore EntityClass.findIdAnnotations(DotName idAnnotationType) never loops through the parent hierarchy to find the @Id annotation in the MappedSuperclass.

This was working in Hibernate 3.6.*.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list