Hi all,
Some time ago, I posted some frustration about Hibernate on
http://blogs.cocoondev.org/tomk/archives/000744.html. By the mysterious ways of the
linked web, Gavin gave me a hint on how to solve the issue I was having. So first of
all, I want to thank Gavin for that.
Now I finally got to implementing his solution, but there seems to be some weird crank
in my brain that blocks me from doing this correctly. So I'll try to give you as
complete information as possible, and I hope that somebody can help me out on this...
I have a table that has a String as key. In the Java class, this key is 'wrapped' in
another class, ItemID.
Following Gavin's recommendations, I've tried to wrap the key in a composite-id tag in
the .hbm.xml:
<composite-id name="itemID" class="com.scm.escher.base.ItemID">
<key-property name="itemID" column="ITEMID" />
</composite-id>
However, when executing the code, I get an exception with the following line that
looks important to know what's going on (full stack trace below, in case I missed
something):
rethrown as cirrus.hibernate.PropertyAccessException: IllegalArgumentException
occurred calling: object is not an instance of declaring class getter of
com.scm.escher.base.ItemID.itemID
On close investigation, it seems that the ReflectHelper.Getter wants to execute the
ItemID.getItemId() method on a String. In my brain, this Getter should receive an
instance of ItemID (so the correct class). Am I wrong here? Can anybody explain me
what reasoning mistake I'm making? And what is the correct way of doing this?
Thanks a lot,
tomK
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:324)
at cirrus.hibernate.helpers.ReflectHelper$Getter.get(ReflectHelper.java:80)
at cirrus.hibernate.type.ComponentType.getPropertyValue(ComponentType.java:169)
at
cirrus.hibernate.type.ComponentType.getPropertyValues(ComponentType.java:175)
at
cirrus.hibernate.type.ComponentType.nullSafeGetValues(ComponentType.java:158)
at cirrus.hibernate.type.ComponentType.nullSafeSet(ComponentType.java:145)
at cirrus.hibernate.loader.Loader.prepareQueryStatement(Loader.java:425)
at cirrus.hibernate.loader.Loader.doFind(Loader.java:145)
at cirrus.hibernate.loader.Loader.loadEntity(Loader.java:491)
at cirrus.hibernate.loader.EntityLoader.load(EntityLoader.java:65)
at cirrus.hibernate.persister.EntityPersister.load(EntityPersister.java:420)
at cirrus.hibernate.impl.SessionImpl.doLoad(SessionImpl.java:1554)
at cirrus.hibernate.impl.SessionImpl.doLoadByClass(SessionImpl.java:1425)
at cirrus.hibernate.impl.SessionImpl.load(SessionImpl.java:1363)
at com.scm.escher.persist.StoreFactory$StoreImpl.get(StoreFactory.java:42)
at com.klaasen.playpen.Main.getItemStockVO(Main.java:160)
at com.klaasen.playpen.Main.main(Main.java:178)
rethrown as cirrus.hibernate.PropertyAccessException: IllegalArgumentException
occurred calling: object is not an instance of declaring class getter of
com.scm.escher.base.ItemID.itemID
at cirrus.hibernate.helpers.ReflectHelper$Getter.get(ReflectHelper.java:90)
at cirrus.hibernate.type.ComponentType.getPropertyValue(ComponentType.java:169)
at
cirrus.hibernate.type.ComponentType.getPropertyValues(ComponentType.java:175)
at
cirrus.hibernate.type.ComponentType.nullSafeGetValues(ComponentType.java:158)
at cirrus.hibernate.type.ComponentType.nullSafeSet(ComponentType.java:145)
at cirrus.hibernate.loader.Loader.prepareQueryStatement(Loader.java:425)
at cirrus.hibernate.loader.Loader.doFind(Loader.java:145)
at cirrus.hibernate.loader.Loader.loadEntity(Loader.java:491)
at cirrus.hibernate.loader.EntityLoader.load(EntityLoader.java:65)
at cirrus.hibernate.persister.EntityPersister.load(EntityPersister.java:420)
at cirrus.hibernate.impl.SessionImpl.doLoad(SessionImpl.java:1554)
at cirrus.hibernate.impl.SessionImpl.doLoadByClass(SessionImpl.java:1425)
at cirrus.hibernate.impl.SessionImpl.load(SessionImpl.java:1363)
at com.scm.escher.persist.StoreFactory$StoreImpl.get(StoreFactory.java:42)
at com.klaasen.playpen.Main.getItemStockVO(Main.java:160)
at com.klaasen.playpen.Main.main(Main.java:178)
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:324)
at cirrus.hibernate.helpers.ReflectHelper$Getter.get(ReflectHelper.java:80)
... 15 more
-------------------------------------------------------
This SF.net email is sponsored by: SlickEdit Inc. Develop an edge.
The most comprehensive and flexible code editor you can use.
Code faster. C/C++, C#, Java, HTML, XML, many more. FREE 30-Day Trial.
www.slickedit.com/sourceforge
_______________________________________________
hibernate-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/hibernate-devel