[
https://issues.apache.org/cayenne/browse/CAY-1121?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Andrus Adamchik closed CAY-1121.
--------------------------------
Resolution: Fixed
> EJBQL collection binding
> ------------------------
>
> Key: CAY-1121
> URL: https://issues.apache.org/cayenne/browse/CAY-1121
> Project: Cayenne
> Issue Type: Bug
> Components: Cayenne Core Library
> Affects Versions: 3.0
> Reporter: Andrus Adamchik
> Assignee: Andrus Adamchik
> Fix For: 3.0
>
>
> When binding collections as EJBQL variable, Cayenne erroneously binds each
> collection value as VARBINARY at the JDBC level. This works ok on some DB's
> (hiding the problem) but breaks on some others. E.g. on SQLServer:
> List<Integer> id = ...
>
> String ejbql = "delete from MeaningfulPKTest1 m WHERE m.pkAttribute
> in (:id)";
>
> EJBQLQuery query = new EJBQLQuery(ejbql);
> query.setParameter("id", id);
> Results in the following error:
> INFO: *** error.
> com.microsoft.sqlserver.jdbc.SQLServerException: The conversion from INTEGER
> to VARBINARY is unsupported.
> at
> com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:130)
> at
> com.microsoft.sqlserver.jdbc.DataTypes.throwConversionError(DataTypes.java:879)
> at
> com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setObject(SQLServerPreparedStatement.java:913)
> at
> com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setObject(SQLServerPreparedStatement.java:884)
> at
> org.apache.cayenne.access.types.AbstractType.setJdbcObject(AbstractType.java:79)
> at
> org.apache.cayenne.dba.JdbcAdapter.bindParameter(JdbcAdapter.java:497)
> at
> org.apache.cayenne.dba.sybase.SybaseAdapter.bindParameter(SybaseAdapter.java:99)
> at
> org.apache.cayenne.access.jdbc.SQLTemplateAction.bind(SQLTemplateAction.java:325)
> at
> org.apache.cayenne.access.jdbc.SQLTemplateAction.execute(SQLTemplateAction.java:150)
> at
> org.apache.cayenne.access.jdbc.SQLTemplateAction.performAction(SQLTemplateAction.java:127)
> at
> org.apache.cayenne.access.jdbc.EJBQLAction.performAction(EJBQLAction.java:101)
> at
> org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:58)
> at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:237)
> at
> org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:424)
> at
> org.apache.cayenne.access.DataDomainQueryAction.access$0(DataDomainQueryAction.java:403)
> at
> org.apache.cayenne.access.DataDomainQueryAction$2.transform(DataDomainQueryAction.java:397)
> at
> org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:847)
> at
> org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:394)
> at
> org.apache.cayenne.access.UnitTestDomainQueryAction.runQueryInTransaction(UnitTestDomainQueryAction.java:55)
> at
> org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:120)
> at
> org.apache.cayenne.access.UnitTestDomainQueryAction.execute(UnitTestDomainQueryAction.java:49)
> at
> org.apache.cayenne.access.UnitTestDomain.onQuery(UnitTestDomain.java:63)
> at
> org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:317)
> at
> org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:96)
> at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1326)
> at
> org.apache.cayenne.access.DataContext.performGenericQuery(DataContext.java:1285)
> at
> org.apache.cayenne.access.DataContextEJBQLDeleteTest.testDeleteIdVar(DataContextEJBQLDeleteTest.java:98)
> The problem is SQLTemplate #bind directive incomplete collection handling.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.