Uploaded image for project: 'z - Hibernate Annotations'
  1. ANN-434

Confusing error message with @EmbeddedId and @Id

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 3.2.0.cr1
    • Fix Version/s: 3.3.1.beta1
    • Component/s: None
    • Labels:
      None
    • Environment:
      Hibernate 3.2.0.cr2
    • Bug Testcase Reminder (view):

      Bug reports should generally be accompanied by a test case!

    • Last commented by a user?:
      true

      Description

      trying to create an entity with embeddedid and automatically generated ids. The resulting error message was very confusing and may be a bug as well.

      (See below for sample files) Notice the message is that TransPolId doesn't have an @Id property when in fact it does. The problem is 'solved' by removing the @Id in the TransPolId class. This caused a lot of wasted time on my part please fix for the next person!
      --------------------------------------------------------------------------------
      Some additional debugging notes:
      The problem is caused in part because when expanding TransPolId to within AnnotationBinder.processElementAnnotations()
      isIdentifierMapper == false so none of the checks looking for this sort of thing execute.

      I believe the solution is to change AnnotationBinder.bindId() as follows:
      (original):
      if ( isComposite ) {
      id = fillComponent(
      propertyHolder, inferredData, isPropertyAnnotated, propertyAccessor,
      false, entityBinder, isEmbedded, isIdentifierMapper, mappings
      );
      Component componentId = (Component) id;
      componentId.setKey( true );
      if ( componentId.getPropertySpan() == 0 )

      { throw new AnnotationException( componentId.getComponentClassName() + " has no persistent id property" ); }
      }
      (changed):
      if ( isComposite ) {
      id = fillComponent(
      propertyHolder, inferredData, isPropertyAnnotated, propertyAccessor,
      false, entityBinder, isEmbedded, true, mappings <<<<<<<<<<<<<<< isIdentifierMapper replaced by true
      );
      Component componentId = (Component) id;
      componentId.setKey( true );
      if ( componentId.getPropertySpan() == 0 ) { throw new AnnotationException( componentId.getComponentClassName() + " has no persistent id property" ); }

      }

      Output:
      java.vm.name=Java HotSpot(TM) Client VM, cache.provider_class=org.hibernate.cache.NoCacheProvider, file.encoding=Cp1252, java.specification.version=1.5, hibernate.show_sql=true, hibernate.connection.pool_size=1}
      16:19:01,109 DEBUG [Configuration] Preparing to build session factory with filters : {}
      16:19:01,109 DEBUG [AnnotationConfiguration] Execute first pass mapping processing
      16:19:01,109 DEBUG [AnnotationConfiguration] Process hbm files
      16:19:01,109 DEBUG [AnnotationConfiguration] Process annotated classes
      16:19:01,125 INFO [AnnotationBinder] Binding entity from annotated class: com.transparentpolitics.core.persistence.IdUsing1
      16:19:01,125 DEBUG [Ejb3Column] Binding column DTYPE unique false
      16:19:01,125 DEBUG [EntityBinder] Import with entity name=IdUsing1
      16:19:01,125 INFO [EntityBinder] Bind entity com.transparentpolitics.core.persistence.IdUsing1 on table IdUsing1
      16:19:01,125 DEBUG [AnnotationBinder] Processing com.transparentpolitics.core.persistence.IdUsing1 property annotation
      16:19:01,125 DEBUG [AnnotationBinder] Processing com.transparentpolitics.core.persistence.IdUsing1 field annotation
      16:19:01,125 DEBUG [AnnotationBinder] Processing annotations of com.transparentpolitics.core.persistence.IdUsing1.transid
      16:19:01,125 DEBUG [Ejb3Column] Binding column transid unique false
      16:19:01,125 DEBUG [AnnotationBinder] transid is an id
      16:19:01,125 DEBUG [AnnotationBinder] Binding component with path: com.transparentpolitics.core.persistence.IdUsing1.transid
      16:19:01,125 DEBUG [AnnotationBinder] Processing com.transparentpolitics.core.persistence.TransPolId field annotation
      16:19:01,125 DEBUG [AnnotationBinder] Processing annotations of com.transparentpolitics.core.persistence.TransPolId.id
      16:19:01,125 DEBUG [Ejb3Column] Binding column id unique false
      16:19:01,125 DEBUG [AnnotationBinder] id is an id
      16:19:01,125 DEBUG [SimpleValueBinder] building SimpleValue for id
      16:19:01,125 DEBUG [PropertyBinder] Building property id
      16:19:01,125 DEBUG [PropertyBinder] Cascading id with null
      16:19:01,125 DEBUG [AnnotationBinder] Bind @Id on id
      org.hibernate.AnnotationException: com.transparentpolitics.core.persistence.TransPolId has no persistent id property
      at org.hibernate.cfg.AnnotationBinder.bindId(AnnotationBinder.java:1686)
      at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1170)
      at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:699)
      at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:353)
      at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:265)
      at org.hibernate.cfg.Configuration.generateDropSchemaScript(Configuration.java:682)
      ... 20 more

      @Embeddable
      public class TransPolId implements Serializable {
      @Id @GeneratedValue
      public Long id;
      @Override
      public boolean equals(Object o) {
      if ( o instanceof TransPolId )

      { return ((TransPolId)o).id.equals(id); }

      return false;
      }
      @Override
      public int hashCode()

      { return id.hashCode(); }

      }

      @Entity
      public class IdUsing1 {
      @EmbeddedId
      public TransPolId id;
      public String value;
      }

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              patmoore P
              Participants:
              P
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: