Uploaded image for project: 'JBoss Enterprise Application Platform 4 and 5'
  1. JBoss Enterprise Application Platform 4 and 5
  2. JBPAPP-6475

HHH-6204 - JoinColumn on non key field fails to populate collection

XMLWordPrintable

    • Hide

      Do not use @EmbeddedId.

      Show
      Do not use @EmbeddedId.
    • Hide
      org.hibernate.PropertyAccessException was thrown if an Entity contained the following conditions:

      1. Uses @EmbeddedId
      2. Uses @JoinTable on a collection or association property/field, which references another property/field of the entity.
      Show
      org.hibernate.PropertyAccessException was thrown if an Entity contained the following conditions: 1. Uses @EmbeddedId 2. Uses @JoinTable on a collection or association property/field, which references another property/field of the entity.
    • Documented as Resolved Issue
    • ON_QA

      See http://opensource.atlassian.com/projects/hibernate/browse/HHH-6204

      =====
      To duplicate the issue, create three tables in a database with no declared primary or foreign keys. Map entities to two of the tables. One of these entities has a primitive @Id; the other has an @EmbeddedId. Both entities contain an additional field used to join with the third table and populate a collection.

      This works with the entity that has a primitive @Id but for the entity with @EmbeddedId, trying to do anything with the collection after calling the getter results in:

      javax.ejb.EJBException: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of jboss.example.DoesNotWorkPk.id1
      at org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:77)
      ....
      Caused by: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of jboss.example.DoesNotWorkPk.id1
      at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:58)
      ....
      Caused by: java.lang.IllegalArgumentException: Can not set java.lang.String field jboss.example.DoesNotWorkPk.id1 to jboss.example.DoesNotWork
      at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146)

      I've attached a sample project. The relevant files are Works.java, DoesNotWork.java, and DoesNotWorkPk.java
      There's also data.sql to populate a mysql db, but I think any DB will do.
      =====

              brmeyer_jira Brett Meyer (Inactive)
              rhn-support-csams Christopher Sams
              Votes:
              3 Vote for this issue
              Watchers:
              7 Start watching this issue

                Created:
                Updated:
                Resolved: