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

Steve Ebersole (JIRA) noreply at atlassian.com
Fri Dec 30 13:20:19 EST 2011


     [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-6924?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Steve Ebersole updated HHH-6924:
--------------------------------

         Priority: Major  (was: Critical)
    Fix Version/s: 5.0.0
       Issue Type: Task  (was: Bug)

As discussed in the 4.0 migration guide, the {{org.hibernate.metamodel}} is not yet finished.  In the meantime, continue to use {{Configuration}}

> 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: Task
>    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
>             Fix For: 5.0.0
>
>
> 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