[hibernate-issues] [Hibernate-JIRA] Created: (ANN-599) @MapKey throws an exception if the key is part of a non-embedded composite ID

Chris Rose (JIRA) noreply at atlassian.com
Thu Apr 19 13:55:04 EDT 2007


@MapKey throws an exception if the key is part of a non-embedded composite ID
-----------------------------------------------------------------------------

                 Key: ANN-599
                 URL: http://opensource.atlassian.com/projects/hibernate/browse/ANN-599
             Project: Hibernate Annotations
          Issue Type: Bug
          Components: binder
    Affects Versions: 3.3.0.ga
         Environment: Hibernate Core 3.2.3, Annotations 3.3.0.GA, Oracle 9i, Java5
            Reporter: Chris Rose
            Priority: Minor


Like mentioned in ANN-43, the property binder for MapKey does not completely handle identifier properties in the owned entity.  Unlike that issue, which is clearly fixed, this issue comes when the mapped entity has a composite primary key that is _not_ handled with a separate PK class.

For example:

class Owner {
  @Id
  Long getOwnerId () {}

  @OneToMany(mappedBy="owner")
  @MapKey(name="propertyName")
  Map<String,Value> getProperties (){}
}

class Value {
  @Id
  String getPropertyName () {}

  @Id
  Long getOwnerId (){}

  @ManyToOne
  @JoinColumn(name="owner_id")
  Owner getOwner ()
}

This generates an exception when I initialize the session:

11:36:27,800  INFO CollectionBinder:627 - Mapping collection: Owner.properties -> properties
Exception in thread "main" org.hibernate.AnnotationException: Map key property not found: Value.propertyName
	at org.hibernate.cfg.annotations.MapBinder.bindKeyFromAssociationTable(MapBinder.java:103)
	at org.hibernate.cfg.annotations.MapBinder.access$000(MapBinder.java:53)
	at org.hibernate.cfg.annotations.MapBinder$1.secondPass(MapBinder.java:83)
	at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:43)
	at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1130)
	at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:316)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1286)
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:915)
	at com.planet.core.SessionFactoryTest.main(SessionFactoryTest.java:46)

>From the code, it's clear that the BinderHelper.findPropertyByName () method only acquires the _first_ identifier property on the Value class, which appears to be the alphabetically first one, rather than the multiple ones.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the hibernate-issues mailing list