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

    Details

    • Workaround Description:
      Hide

      Do not use @EmbeddedId.

      Show
      Do not use @EmbeddedId.
    • Release Notes Text:
      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.
    • Release Notes Docs Status:
      Documented as Resolved Issue
    • Docs QE Status:
      ON_QA

      Description

      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.
      =====

        Gliffy Diagrams

          Attachments

            Issue Links

              Activity

                People

                • Assignee:
                  brmeyer Brett Meyer
                  Reporter:
                  csams Chris Sams
                • Votes:
                  3 Vote for this issue
                  Watchers:
                  7 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved: