Just got some time to test it, and the problem seems to be in
org.apache.cayenne.access.jdbc.ColumnDescriptor constructor... It is
getting confused by MySQL ResultSetMetaData returning JDBC type for
such column as INTEGER.
I created a new Jira issue with description of this problem:
http://issues.apache.org/cayenne/browse/CAY-672
I'll commit a fix to 3.0, as 1.2 users can have some code relying on
the old behavior and we want to keep 1.2 stable.
Andrus
On Sep 26, 2006, at 7:11 AM, Tobias SCHOESSLER wrote:
Andrus,
I am referring to http://issues.apache.org/cayenne/browse/CAY-639
and our
discussion below.
I am using cayenne 1.2.1 now. I mapped all AUTO_INCREMENTED primary
keys of
sql type unsigned int as BIG_INT in cayenne.
Cayenne correctly returns DataObjects with a primary key of type
Long when
using SelectQuery, when creating new objects or using getToXXX
navigation
to retrieve the object .
But when I use SQLTemplate to retrieve the same DataObject cayenne
still
returns a pk of type Integer ...
These are my test cases:
public void testDocumentPkViaSelectQuery() {
List<TldDocument> docList =
dataContext.performQuery(new
SelectQuery(TldDocument.class, null));
assertEquals(Long.class,
docList.get(0).getObjectId().getIdSnapshot().get
(TldDocument.DOCUMENT_UID_PK_COLUMN).getClass());
}
public void testDocumentPkViaSQLTemplate() {
String sqlSelect = " select * ";
String sqlFrom = " from TLD_DOCUMENT doc ";
SQLTemplate query = new SQLTemplate
(TldDocument.class,
sqlSelect + " " + sqlFrom);
List<TldDocument> docList =
dataContext.performQuery(query);
assertEquals(Long.class,
docList.get(0).getObjectId().getIdSnapshot().get
(TldDocument.DOCUMENT_UID_PK_COLUMN).getClass());
}
testDocumentPkViaSelectQuery passes.
testDocumentPkViaSQLTemplate fails.
thanks, regards
Tobias.
Andrus Adamchik
<[EMAIL PROTECTED]
le.org> To
cayenne-
[EMAIL PROTECTED]
Tuesday,
29 cc
August 2006 15:35
Subject
Re: Problems with MySql id type
Please respond to with AUTO_INCREMENT
[EMAIL PROTECTED]
bator.apache.org
I'd appreciate that.
Andrus
On Aug 29, 2006, at 5:31 PM, Tobias SCHOESSLER wrote:
ok, I got it. You want me to add a Jira entry for this? I never did
this
before ... : |
Andrus Adamchik
<[EMAIL PROTECTED]
le.org> To
cayenne-
[EMAIL PROTECTED]
Tuesday,
29 cc
August 2006 15:19
Subject
Re: Problems with MySql id
type
Please respond to with AUTO_INCREMENT
[EMAIL PROTECTED]
bator.apache.org
On Aug 29, 2006, at 4:16 PM, Tobias SCHOESSLER wrote:
But still you are right there is a bug in mysql too. If the column
type is
INT and not INT UNSIGNED it should return java.lang.Integer but it
returns
java.lang.Long instead. This was my first observation.
Still probably worth fixing the mapping to follow the docs.
but why does cayenne need BIGINT mapping set for the column to
retrieve it
as a java.lang.Long? I understand that this is unrelated to the bug
in the
mysql jdbc driver mentioned above.
This is simply a workaround for the bug. BIGINT has a default JDBC
mapping to java.lang.Long. So this consistently produced a Long
during select and when reading auto-incremented value via JDBC.
Andrus