[
http://opensource.atlassian.com/projects/hibernate/browse/HHH-2776?page=c...
]
Steve Ebersole updated HHH-2776:
--------------------------------
Assignee: Steve Ebersole
Component/s: query-hql
Issue Type: New Feature (was: Bug)
Couple of points:
1) Actually the SQL spec says that "... in () ..." is not valid; there must be
at least one value present in the in-value-list. However, my reading of the spec (SQL-92)
is that NULL is not allowed to be an in-value-list item either. SQL-2008 does allow NULLs
in an explicit in-value-list, so somewhere in between that changed. That leaves a
conundrum...
2) If we were to use "... in (NULL) ...", the spec says that NULL == NULL is
undefined and should never return true. So comparison for a NULL value in a value list
should therefore never return true. So we'd be safe to my thinking
Regardless, this is not a bug to my mind but a feature request. The only question here is
who has responsibility to make sure there is at least one value in the in-value-list. The
request is to make Hibernate responsible for this.
Restrictons.in(..) generates invalid SQL if list of values is empty
-------------------------------------------------------------------
Key: HHH-2776
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-2776
Project: Hibernate Core
Issue Type: New Feature
Components: query-criteria, query-hql
Affects Versions: 3.2.2
Environment: Hibernate 3.2.2.ga, MySQL 4.1.18, Windows XP
Reporter: Adrian Smith
Assignee: Steve Ebersole
I have classes called A and B. There is a 1:n relationship from A to B.
Class B has the following in its mapping file:
<many-to-one name="a" class="A" column="fk_a_id"
not-null="true" />
If I write the following code:
List<B> foo() {
List<A> aList = ....
Session session = ....
Criteria query = session.createCriteria(B.class);
query.add(Restrictions.in("a", aList));
return query.list();
}
Then all works fine and the results I want are returned. However, if aList is empty (i.e.
aList.size()==0) then the query.list function generates and executes invalid SQL for
MySQL.
java.sql.SQLException: Syntax error or access violation message from server: "You
have an error in your SQL syntax; check the manual that corresponds to your MySQL server
version for the right syntax to use near ')' at line 1"
I imagine that it is generating SQL like IN () which isn't valid.
I realize it's a bit ridiculous to want to find the rows where a field is IN the
empty list. Nothing will ever be returned. However, in my opinion it should still be
allowed, and return no rows, just as saying "WHERE 1=2" is allowed, just
doesn't return any rows.
--
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