You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by "Alex Kolonitsky (JIRA)" <ji...@apache.org> on 2015/02/03 16:47:34 UTC

[jira] [Created] (CAY-1985) JDBC Array type support

Alex Kolonitsky created CAY-1985:
------------------------------------

             Summary: JDBC Array type support
                 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)