]
Rob MacGrogan commented on HHH-957:
-----------------------------------
This bug is still present as of 3.2.2 although the SubqueryExpression class has been
completely rewritten. The offending line even as the word "ugly" appended to it
as a comment.
I've attached a new patch that works with 3.2.2.
SubqueryExpression throws ClassCastException on DetachedCriteria
subqueries
---------------------------------------------------------------------------
Key: HHH-957
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-957
Project: Hibernate3
Issue Type: Bug
Affects Versions: 3.0.5
Environment: Oracle 9i, but probably not DB specific.
Reporter: Rob MacGrogan
Priority: Minor
Attachments: subcriteria-patch.txt, SubqueryExpression.java,
SubqueryExpression.java, SubqueryExpression.java
The toSqlString() method in SubqueryExpression contains a line that casts a Criteria
object to CriteriaImpl in order to call the getSession() method. However, if
DetachedCriteria is used as a subquery in a Criteria query, the underlying Criteria object
will be CriteriaImpl.Subcriteria, thus a ClassCastException will be thrown.
I have created a bug fix. Add the following method to SubqueryExpression:
private SessionImpl getSessionImpl(Criteria criteria) {
SessionImpl session = null;
if (criteria instanceof CriteriaImpl) {
CriteriaImpl impl = (CriteriaImpl)criteria;
session = impl.getSession();
}
else if (criteria instanceof CriteriaImpl.Subcriteria){
CriteriaImpl.Subcriteria sub = (CriteriaImpl.Subcriteria)criteria;
//Alert! Recursive call here!
session = getSessionImpl(sub.getParent());
}
return session;
}
And then replace the offending line in toSqlString() with a call to the new method.
Attached is SubqueryExpression with proposed changes in place.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: