[jira] Commented: (CAY-1034) ObjectId key singleValue is byte[]

From: Andrus Adamchik (JIRA) ("Andrus)
Date: Thu Apr 17 2008 - 06:11:52 EDT

  • Next message: Malcolm Edgar (JIRA): "[jira] Commented: (CAY-1034) ObjectId key singleValue is byte[]"

        [ https://issues.apache.org/cayenne/browse/CAY-1034?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12815#action_12815 ]

    Andrus Adamchik commented on CAY-1034:
    --------------------------------------

    Hmm... byte[] PK's worked just fine, and there is no need to convert them to String... What we need to do is to determine what environment causes this error... I incorrectly assumed PostgreSQL in my mailing list message. But from the stack trace this is MySQL... But the question remains - what MySQL column type this is and how is it mapped in Cayenne?

    > ObjectId key singleValue is byte[]
    > ----------------------------------
    >
    > Key: CAY-1034
    > URL: https://issues.apache.org/cayenne/browse/CAY-1034
    > Project: Cayenne
    > Issue Type: Bug
    > Components: Cayenne Core Library
    > Affects Versions: 3.0
    > Environment: Cayenne 3.0 M3, JDK 1.5.0_15
    > Reporter: Malcolm Edgar
    > Assignee: Andrus Adamchik
    > Attachments: ObjectId.java
    >
    >
    > I have a nasty problem with attempting to perform a refetchObject() on a hollow object. This is the DataObject toString(), note the primary key column 'schema_config_oid' has a value of '..eaf8c>'
    > The primary key column of this database is an BIGINT, this table only has one record and its PK value is '1'
    > {<ObjectId:SchemaConfig, schema_config_oid=[..eaf8c>; hollow; []}
    > When I try to refetchObject(), I get a stacktrace of:
    > Caused by: java.sql.SQLException: Cannot convert class [B to SQL type requested due to java.lang.ClassCastException - [B
    > at com.mysql.jdbc.PreparedStatement.setObject(PreparedStatement.java:2744)
    > at com.mysql.jdbc.PreparedStatement.setObject(PreparedStatement.java:2532)
    > at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.setObject(WrappedPreparedStatement.java:420)
    > at org.apache.cayenne.access.types.AbstractType.setJdbcObject(AbstractType.java:79)
    > at org.apache.cayenne.access.types.ByteArrayType.setJdbcObject(ByteArrayType.java:191)
    > at org.apache.cayenne.dba.JdbcAdapter.bindParameter(JdbcAdapter.java:481)
    > at org.apache.cayenne.access.trans.QueryAssembler.initStatement(QueryAssembler.java:123)
    > at org.apache.cayenne.access.trans.QueryAssembler.createStatement(QueryAssembler.java:99)
    > at org.apache.cayenne.access.jdbc.SelectAction.performAction(SelectAction.java:71)
    > at org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:58)
    > at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:230)
    > ... 60 more
    > Some more analysis on this problem the ObjectId singleValue value is a byte[] of the table primary key value "3456", and the ObjectId is returning the raw byte array as the single primary key value.
    > This is making a mess of Cayenne refreshing objects, lazy loading, etc.
    > I am wondering if this is a JDK 1.5 coercion issue, I have never seen this issue before with JDK 1.4 and Cayenne 1.x.
    > A solution to this problem is provided in the attached org.apache.cayenne.ObjectId file.

    -- 
    This message is automatically generated by JIRA.
    -
    You can reply to this email to add a comment to the issue online.
    



    This archive was generated by hypermail 2.0.0 : Thu Apr 17 2008 - 06:15:06 EDT