[hibernate-issues] [Hibernate-JIRA] Created: (HHH-2196) Cryptic exception when xml mapping is missing incomplete - needs better error message

Don Smith (JIRA) noreply at atlassian.com
Mon Oct 30 16:17:05 EST 2006


Cryptic exception when xml mapping is missing incomplete - needs better error message
-------------------------------------------------------------------------------------

         Key: HHH-2196
         URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2196
     Project: Hibernate3
        Type: Bug

  Components: core  
    Versions: 3.2.0.ga    
 Environment: Hibernate 3.0.2.ga, MySQL 5.0.22, with 5.0.3 JDBC driver
    Reporter: Don Smith


Mapings with composite-ids mapped to classes require a node attribute, and a corresponding "wrapping" node in the xml data file. I learned this by educated guess when I saw this stack trace:

org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): com.novell.soa.af.impl.persist.ProvisioningStatus
	at org.hibernate.id.Assigned.generate(Assigned.java:33)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:98)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
	at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
	at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
	at com.novell.soa.persist.HibernateDAO.loadData(HibernateDAO.java:294)
	at com.novell.soa.persist.HibernateUtilTest.testLoadData(HibernateUtilTest.java:100)
	... 23 more


The class has this for the composite-id:

<hibernate-mapping>
  <class name="com.novell.soa.af.impl.persist.ProvisioningStatus" table="AFPROVISIONINGSTATUS" node="AFPROVISIONINGSTATUS">
    <composite-id name="id" class="com.novell.soa.af.impl.persist.ProvisioningStatusId">
            <key-property name="requestId" column="REQUESTID" node="REQUESTID" type="string" length="32"/>
            <key-property name="activityId" column="ACTIVITYID" node="ACTIVITYID" type="string" length="32"/>
            <key-property name="statusId" column="STATUSID" node="STATUSID" type="string" length="32"/>
    </composite-id>

The data has this structure:

  <AFPROVISIONINGSTATUS>
    <REQUESTID>1f24163a7de94a0e93eda2df92dad236</REQUESTID>
    <ACTIVITYID>prov</ACTIVITYID>
    <STATUSID>XXX</STATUSID>
    <RECIPIENT>cn=apalani,ou=users,ou=idmsample-js,o=novell</RECIPIENT>
    <CORRELATIONID></CORRELATIONID>
    <PROVISIONINGTIME>2006-06-30 13:00:17.0</PROVISIONINGTIME>
    <RESULTTIME></RESULTTIME>
    <STATE>-1</STATE>
    <STATUS>-1</STATUS>
    <MESSAGE></MESSAGE>
    <VERSION>0</VERSION>
  </AFPROVISIONINGSTATUS>

After adding an node="ID" attribute to the composite-id element, and adding <ID> elements wrapping the three key nodes, the xml mapping worked:

<hibernate-mapping>
  <class name="com.novell.soa.af.impl.persist.ProvisioningStatus" table="AFPROVISIONINGSTATUS" node="AFPROVISIONINGSTATUS">
    <composite-id name="id" class="com.novell.soa.af.impl.persist.ProvisioningStatusId" node="ID">
            <key-property name="requestId" column="REQUESTID" node="REQUESTID" type="string" length="32"/>
            <key-property name="activityId" column="ACTIVITYID" node="ACTIVITYID" type="string" length="32"/>
            <key-property name="statusId" column="STATUSID" node="STATUSID" type="string" length="32"/>
    </composite-id>


  <AFPROVISIONINGSTATUS>
    <ID>
       <REQUESTID>1f24163a7de94a0e93eda2df92dad236</REQUESTID>
       <ACTIVITYID>prov</ACTIVITYID>
    <STATUSID>XXX</STATUSID>
    </ID>
    <RECIPIENT>cn=apalani,ou=users,ou=idmsample-js,o=novell</RECIPIENT>
    <CORRELATIONID></CORRELATIONID>
    <PROVISIONINGTIME>2006-06-30 13:00:17.0</PROVISIONINGTIME>
    <RESULTTIME></RESULTTIME>
    <STATE>-1</STATE>
    <STATUS>-1</STATUS>
    <MESSAGE></MESSAGE>
    <VERSION>0</VERSION>
  </AFPROVISIONINGSTATUS>

There should be a better error message.

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