[ https://issues.apache.org/jira/browse/CAY-1985?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Alex Kolonitsky updated CAY-1985: --------------------------------- Summary: JDBC Array type is not supported (was: JDBC Array type support) > JDBC Array type is not supported > -------------------------------- > > Key: CAY-1985 > URL: https://issues.apache.org/jira/browse/CAY-1985 > Project: Cayenne > Issue Type: Bug > Components: Core Library > Affects Versions: 4.0.M2 > Reporter: Alex Kolonitsky > > {code:xml|title=cayenne-project.xml|borderStyle=solid} > <?xml version="1.0" encoding="utf-8"?> > <domain project-version="7"> > <map name="datamap"/> > <node name="datanode" > schema-update-strategy="org.apache.cayenne.access.dbsync.CreateIfNoSchemaStrategy"> > <map-ref name="datamap"/> > <data-source> > <driver value="org.h2.Driver"/> > <url value="jdbc:h2:~/test"/> > <connectionPool min="1" max="1"/> > <login/> > </data-source> > </node> > </domain> > {code} > {code:xml|title=datamap.map.xml|borderStyle=solid} > <?xml version="1.0" encoding="utf-8"?> > <data-map xmlns="http://cayenne.apache.org/schema/7/modelMap" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:schemaLocation="http://cayenne.apache.org/schema/7/modelMap > http://cayenne.apache.org/schema/7/modelMap.xsd" > project-version="7"> > <property name="defaultPackage" value="com.mycompany.app"/> > <db-entity name="Object_With_Array"> > <db-attribute name="array" type="ARRAY" length="50"/> > <db-attribute name="id" type="INTEGER" isPrimaryKey="true" > isMandatory="true"/> > </db-entity> > <obj-entity name="ObjectWithArray" > className="com.mycompany.app.ObjectWithArray" > dbEntityName="Object_With_Array"> > <obj-attribute name="array" type="java.lang.Double[]" > db-attribute-path="array"/> > </obj-entity> > </data-map> > {code} > {code:java|title=App.java|borderStyle=solid} > public class App { > public static void main( String[] args ) throws ClassNotFoundException, > SQLException { > ServerRuntime runtime = new ServerRuntime("cayenne-project.xml"); > DataContext context = (DataContext)runtime.newContext(); > ObjectWithArray owa = context.newObject(ObjectWithArray.class); > owa.setArray(new Double[]{1.0, 2.0}); > context.commitChanges(); > List list = context.performQuery(new > SelectQuery(ObjectWithArray.class)); > System.out.println(Arrays.toString(((ObjectWithArray) > list.get(0)).getArray())); > } > } > {code} > *Expected result* : console output [1.0, 2.0] > *Actual result* : exception > {code} > org.h2.jdbc.JdbcSQLException: Hexadecimal string contains non-hex character: > "(aced0005...00000000000)" [90004-185] > at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) > at org.h2.message.DbException.get(DbException.java:179) > at org.h2.message.DbException.get(DbException.java:155) > at org.h2.util.StringUtils.convertHexToBytes(StringUtils.java:966) > at org.h2.value.Value.convertTo(Value.java:864) > at org.h2.value.Value.getBytes(Value.java:411) > at org.h2.jdbc.JdbcResultSet.getBytes(JdbcResultSet.java:1054) > at > org.apache.cayenne.access.types.ByteArrayType.materializeObject(ByteArrayType.java:89) > at > org.apache.cayenne.access.types.ExtendedTypeDecorator.materializeObject(ExtendedTypeDecorator.java:53) > at > org.apache.cayenne.access.jdbc.reader.FullRowReader.readRow(FullRowReader.java:52) > at > org.apache.cayenne.access.jdbc.reader.FullRowReader.readRow(FullRowReader.java:32) > at > org.apache.cayenne.access.jdbc.JDBCResultIterator.nextRow(JDBCResultIterator.java:104) > at > org.apache.cayenne.access.jdbc.JDBCResultIterator.allRows(JDBCResultIterator.java:80) > at > org.apache.cayenne.access.jdbc.SelectAction.performAction(SelectAction.java:181) > at > org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:97) > at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:302) > at > org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:439) > at > org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:71) > at > org.apache.cayenne.access.DataDomainQueryAction$2.perform(DataDomainQueryAction.java:412) > at > org.apache.cayenne.tx.DefaultTransactionManager.performInTransaction(DefaultTransactionManager.java:53) > at > org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:409) > at > org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:121) > at > org.apache.cayenne.access.DataDomain.onQueryNoFilters(DataDomain.java:560) > at > org.apache.cayenne.access.DataDomain$DataDomainQueryFilterChain.onQuery(DataDomain.java:744) > at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:552) > at > org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:350) > at > org.apache.cayenne.util.ObjectContextQueryAction.executePostCache(ObjectContextQueryAction.java:106) > at > org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:93) > at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:985) > at > org.apache.cayenne.access.DataContext.performQuery(DataContext.java:974) > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)