[
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1039?page=c...
]
Jon Seymour commented on HHH-1039:
----------------------------------
Hi.
I also experienced this issue.
I had a data model that looked like this:
Customer 1 -> n CustomerRole n -> 1 Person
the problem was that on the association between CustomerRole and Person, I named the node
rolePerson
whereas on the Person entity itself, I declared the XML node to be person.
Everything worked when I fetched a customer and all objects reachable from the customer.
A problem arose when I declared the associations to be fetch="join" and then did
a Criteria-style query on customers which was qualified by person.
This would result in SQL that did joins across the customer, customer role and person
entities and would result in the initial person entity being unpacked as a
"person" element. Then, when the associations were followed the person would be
queried again but this time it would be unpacked as a "rolePerson". This caused
a clash that was eventually reported as a WrongClassException.
Per Roland's suggestion, the solution was to given the association that referenced
person and the person entity itself the same XML node name (person).
WrongClassException when scrolling through EntityMode.DOM4J and
loading identical objects from different fields
---------------------------------------------------------------------------------------------------------------
Key: HHH-1039
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1039
Project: Hibernate3
Issue Type: Bug
Affects Versions: 3.0.5
Environment: Windows XP, JDK 1.4.2_8, Hibernate 3.0.5, Oracle 9.2. Replicated on
Windows XP, JDK 1.5.0_2, Hibernate 3.0.5, MySQL
Reporter: Roland Groen
Fix For: entity-modes
Attachments: HbmXmlTest.java, Test.hbm.xml
When working with XML representations of entities, an unexpected
org.hibernate.WrongClassException is thrown when working with identical embedded objects
(embed-xml="true") which have different field names.
org.hibernate.WrongClassException seems to be thrown when:
1) Running in EntityMode.DOM4J
2) Scrolling through a result set using session.scroll()
3) Embedding objects that are:
a) Referred by least by one of the objects on which the query is selecting primarily
(parent object) and,
b) that field is in FetchMode.JOIN.
c) Referred by one object which is embedded (embed-xml="true") and uses a
different field name to refer to the object than the parent object.
I would like to apologise for the large test case. The bug is quite hard to reproduce, I
tried to minimise the test, but this seems the smallest and most simple case I can find.
The stack trace is:
Caused by: org.hibernate.WrongClassException: Object with id: 1 was not of the specified
subclass: Customer (loaded object was of wrong class)
at org.hibernate.loader.Loader.instanceAlreadyLoaded(Loader.java:890)
at org.hibernate.loader.Loader.getRow(Loader.java:846)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:305)
at org.hibernate.loader.Loader.loadSingleRow(Loader.java:238)
at
org.hibernate.impl.ScrollableResultsImpl.prepareCurrentRow(ScrollableResultsImpl.java:477)
at org.hibernate.impl.ScrollableResultsImpl.next(ScrollableResultsImpl.java:106)
at HbxXmlTest.main(HbxXmlTest.java:90)
The included files are:
Test.hbm.xml : the hbm file to create the classes
HbmXmlTest.java : the the java source to reproduce the issue.
Greetings,
Roland.
--
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