[
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1123?page=c...
]
FCT commented on HHH-1123:
--------------------------
Example to use HQLHelper.java. Use this dialect for single parameters:
HQLHelper.replaceClauseIn(session,
"from Entity as entity where entity.identifier in (:ids)", "ids",
myDearBigCollection);
or
HQLHelper.replaceClauseIn(session, "myNamedQuery", "ids",
myDearBigCollection);
or more than one in clauses:
replaceClauseIn(session,"from Entity as entity where entity.identifier in (:ids) and
entity.name in (:names)", Map<String, ? extends Object>);
where map contains collection to string query-parameter key,
map.put("ids", collectionx);
map.put("names", collectiony);
Works fine!
Cannot put more than 1000 elements in a InExpression
----------------------------------------------------
Key: HHH-1123
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1123
Project: Hibernate Core
Issue Type: Improvement
Components: core
Affects Versions: 3.1 rc2, 3.2.0.alpha1
Environment: Oracle 9i
Reporter: Alexis Seigneurin
Attachments: Animal.hbm.xml, hibernate-inexpression-oracle-3.2.patch,
HQLHelper.java, LongInElementsTest.java, patch.txt
Original Estimate: 1h
Remaining Estimate: 1h
The number of elements that we can put in a "in" expression is limited to a
certain amount (1000 for Oracle, for instance). When creating a criteria query, the
org.hibernate.criterion.InExpression class should split the expression into several
smaller ones.
Attached is a patch which splits the expression by slices of 500 elements. For example,
if we have 1001 elements to put in the "in" expression, the result would be :
(entity.field in (?, ?, ?...) or entity.field in (?, ?, ?...) or entity.field in (?))
The surrounding parantheses are useful to avoid problems with other conditions (a
"and" condition taking over the one of the "or" conditions).
--
This message is automatically generated by JIRA.
For more information on JIRA, see:
http://www.atlassian.com/software/jira