The Author Online Book Forums are Moving

The Author Online Book Forums will soon redirect to Manning's liveBook and liveVideo. All book forum content will migrate to liveBook's discussion forum and all video forum content will migrate to liveVideo. Log in to liveBook or liveVideo with your Manning credentials to join the discussion!

Thank you for your engagement in the AoF over the years! We look forward to offering you a more enhanced forum experience.

I have a scenario where the foreignkey in the child table references a part of primarykey in the parent table which is also unique. This is an existing database.

I remapped the unique primary key part and used the property-ref attribute to reference the remapped property.

I am getting the following error.

29-Mar-2010 11:24: AM. ERROR BasicPropertyAccessor.get:191 - IllegalArgumentException in class: com.test.model.StudentId, getter method of property: stateId
Exception in thread "main" org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of com.test.model.StudentId.stateId
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:195)
at org.hibernate.tuple.component.AbstractComponentTuplizer.getPropertyValue(AbstractComponentTuplizer.java:87)
at org.hibernate.tuple.component.AbstractComponentTuplizer.getPropertyValues(AbstractComponentTuplizer.java:93)
at org.hibernate.tuple.component.PojoComponentTuplizer.getPropertyValues(PojoComponentTuplizer.java:109)
at org.hibernate.type.ComponentType.getPropertyValues(ComponentType.java:376)
at org.hibernate.type.ComponentType.getHashCode(ComponentType.java:207)
at org.hibernate.engine.EntityKey.generateHashCode(EntityKey.java:126)
at org.hibernate.engine.EntityKey.<init>(EntityKey.java:70)
at org.hibernate.engine.StatefulPersistenceContext.getCollectionOwner(StatefulPersistenceContext.java:701)
at org.hibernate.loader.Loader.readCollectionElement(Loader.java:1016)
at org.hibernate.loader.Loader.readCollectionElements(Loader.java:669)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:614)
at org.hibernate.loader.Loader.doQuery(Loader.java:724)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
at org.hibernate.loader.Loader.loadCollection(Loader.java:2019)
at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:59)
at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:587)
at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:83)
at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1744)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:366)
at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:10smilie
at org.hibernate.collection.PersistentSet.iterator(PersistentSet.java:186)
at com.test.Test.main(Test.java:26)
Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:169)
... 22 more



Hibernate version : 3.3.1 GA

Reference Book :
Book : Java Persistance with Hibernate (i.e. Revised Edition of Hibernate In Action)
ISBN : 1-932394-88-5

Source xml for Mapping:

<hibernate-mapping>
<class name="com.test.model.Student" table="STUDENT" schema="APP" entity-name="student">

<composite-id name="id" class="com.test.model.StudentId">
<key-property name="stateId" type="string">
<column name="SSN" length="10" />
</key-property>
<key-property name="rollNumber" type="string">
<column name="RNUM" length="10" />
</key-property>
</composite-id>
<!-- Remapped part of primary key -->
<property name="roll" type="string" update="false" insert="false" unique="true">
<column name="RNUM" length="20"/>
</property>
<property name="fName" type="string">
<column name="FNM" length="20" />
</property>
<property name="lName" type="string">
<column name="LNM" length="20" />
</property>
<set name="progressCards">
<key column="RNUM" property-ref="roll"/>
<one-to-many entity-name="progresscard" />
</set>
</class>
<class name="com.test.model.ProgressCard" table="PROGRESSCARD" schema="APP" entity-name="progresscard">

<id name="examCode" type="string">
<column name="TESTNM" length="10" />
<generator class="assigned" />
</id>
<property name="rollNumber" type="string">
<column name="RNUM" length="10" />
</property>
<property name="score1" type="java.lang.Integer">
<column name="MARX1" />
</property>
<property name="score2" type="java.lang.Integer">
<column name="MARX2" />
</property>
</class>
</hibernate-mapping>

Thanks & Regards,
Srinivas Arava.