Hello,

 

Oracle and DB2 allow multiple columns to be used for IN predicate in where
clause. I can construct a query like this SELECT * FROM CUSTOMER C WHERE
(C.STATE, C.CITY) IN (SELECT L.STATE, L.CITY FROM LOCATIONS L WHERE
L.COUNTRY='USA') to retrieve a list of customers located in the same state
and city present in LOCATION table with country 'USA'. 

 

I've noticed that addIn (Object column, Query subQuery) method of Criteria
class accepts Object as the first parameter and was wandering if there's a
way to pass a list of columns instead of just one. 

 

I was able to build a valid SQL when specified "(C.STATE , C.CITY)" as a
first parameter but I don't want to use physical column names in my code.
Also, notice a space between C.STATE and comma. If space not provided
following exception is thrown:

 

java.lang.StringIndexOutOfBoundsException: String index out of range: -2

      at java.lang.String.substring(String.java(Compiled Code))

      at org.apache.ojb.broker.util.SqlHelper.splitPath(Unknown Source)

      at org.apache.ojb.broker.util.SqlHelper.cleanPath(Unknown Source)

      at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.buildJoinTreeForColu
mn(Unknown Source)

      at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.buildJoinTree(Unknow
n Source)

      at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.splitCriteria(Unknow
n Source)

      at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.<init>(Unknown
Source)

      at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.<init>(Unknown
Source)

      at
org.apache.ojb.broker.accesslayer.sql.SqlSelectStatement.<init>(Unknown
Source)

      at
org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl.getPreparedSel
ectStatement(Unknown Source)

      at
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery(Unknown
Source)

      at
org.apache.ojb.broker.accesslayer.RsQueryObject.performQuery(Unknown Source)

      at org.apache.ojb.broker.accesslayer.RsIterator.<init>(Unknown Source)

      at
org.apache.ojb.broker.core.RsIteratorFactoryImpl.createRsIterator(Unknown
Source)

      at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery(Unkn
own Source)

      at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorFromQuery(Unknow
n Source)

      at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown
Source)

      at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown
Source)

      at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown
Source)

      at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Unknow
n Source)

      at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(
Unknown Source)

      at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(
Unknown Source)

 

 

Thank you,

Max.

Reply via email to