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....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira