Re: Problems with MySql id type with AUTO_INCREMENT

From: Tobias SCHOESSLER (Tobias.Schoessle..nvienna.org)
Date: Tue Aug 29 2006 - 08:16:17 EDT

  • Next message: Andrus Adamchik: "Re: Problems with MySql id type with AUTO_INCREMENT"

    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.

    http://lists.mysql.com/java/6383

    this is from jconnector 3.0.8 but I don't see it fixed in the 3.1.13
    release notes.

    So this is the reason why I got a class cast exception for the PK in the
    first place. Then I changed the mysql datatype to INT UNSIGNED.

    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.

                                                                               
                 Andrus Adamchik
                 <andru..bjectsty
                 le.org> To
                                           cayenne-use..ncubator.apache.org
                 Tuesday, 29 cc
                 August 2006 13:45
                                                                       Subject
                                           Re: Problems with MySql id type
                 Please respond to with AUTO_INCREMENT
                 cayenne-use..ncu
                 bator.apache.org
                                                                               
                                                                               
                                                                               
                                                                               

    You are right: "INTEGER [UNSIGNED] [...] java.lang.Integer, if
    UNSIGNED java.lang.Long". Who would've thought! :-)

    I'd appreciate a Jira issue so that we don't forget about it.

    Andrus

    On Aug 29, 2006, at 3:40 PM, Tobias SCHOESSLER wrote:

    > For the driver I use mysql-connector-java-3.1.13-bin.jar
    >
    > here
    >
    > http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-type-
    > conversions.html
    >
    > it reads that INT UNSIGNED should map to java.lang.Long. This is
    > fine I
    > think and it is correct right after creation of the object.
    >
    > But why is the type of the column java.lang.Integer when I retrieve
    > the
    > value later via cayenne? Isn't the bug rather to search there?
    >
    >
    >
    >
    >
    >
    > Andrus Adamchik
    > <andru..bjectsty
    >
    > le.org> To
    > cayenne-
    > use..ncubator.apache.org
    > Tuesday,
    > 29 cc
    > August 2006 13:27
    >
    > Subject
    > Re: Problems with MySql id type
    > Please respond to with AUTO_INCREMENT
    > cayenne-use..ncu
    > bator.apache.org
    >
    >
    >
    >
    >
    >
    >
    >
    > I don't think that globally changing INT to be mapped to JDBC BIGINT
    > is a good idea (although this can be done by editing org/objectstyle/
    > cayenne/dba/mysql/types.xml). What is confusing to me is why the
    > generated key is java.lang.Long for the INTEGER column. Could be a
    > MySQL driver bug???
    >
    > Andrus
    >
    >
    > On Aug 29, 2006, at 3:15 PM, Tobias SCHOESSLER wrote:
    >
    >> it was mapped as
    >>
    >> <db-attribute ... type="INTEGER" length="10"/>
    >>
    >> I changed the type to BIGINT and now the PK is always a Long. Great,
    >> thanks. This was hard to guess.
    >>
    >> Is the jdbc type mapping messed up for the MySQL Adapter?
    >>
    >> When I reverse engineer the db from scratch
    >>
    >> INT UNSIGNED is mapped as <db-attribute ... type="INTEGER"
    >> length="10"/>
    >>
    >> INT is mapped as <db-attribute ... type="INTEGER" length="11"/>
    >>
    >> Could you give me a hint where to change this mapping so I do not
    >> have to
    >> set it to BIGINT manually?
    >>
    >> thank you
    >>
    >> Tobias
    >>
    >>
    >>
    >>
    >>
    >> Andrus Adamchik
    >> <andru..bjectsty
    >>
    >> le.org> To
    >> cayenne-
    >> use..ncubator.apache.org
    >> Tuesday,
    >> 29 cc
    >> August 2006 11:00
    >>
    >> Subject
    >> Re: Problems with MySql id
    >> type
    >> Please respond to with AUTO_INCREMENT
    >> cayenne-use..ncu
    >> bator.apache.org
    >>
    >>
    >>
    >>
    >>
    >>
    >>
    >>
    >> How is the column mapped in the Modeler? Have you tried mapping it as
    >> BIGINT?
    >>
    >> Andrus
    >>
    >>
    >>
    >> On Aug 28, 2006, at 1:22 PM, Tobias SCHOESSLER wrote:
    >>
    >>>
    >>> I use cayenne 1.2, MySql. AUTO_INCREMENT ids
    >>>
    >>> the type of the id field in the mysql schema is set to
    >>>
    >>> INT NOT NULL AUTO_INCREMENT UNIQUE
    >>>
    >>> I create an object of this table with cayenne and commit. I see the
    >>> row
    >>> inserted ok. When accessing the Id of the object via
    >>>
    >>> getObjectId().getIdSnapshot().get(this.FOLDER_UID_PK_COLUMN)
    >>>
    >>> in the same DataContext the type of the Object retruned is a Long.
    >>> (Though
    >>> I would have expected it to be an Integer from the MySql jdbc
    >>> documentation)
    >>>
    >>> When I use a fresh DataContext and retrieve the same row the id
    >>> object
    >>> returned by
    >>>
    >>> getObjectId().getIdSnapshot().get(this.FOLDER_UID_PK_COLUMN)
    >>>
    >>> seems to be an Integer ?
    >>>
    >>>
    >>>
    >>> I tried to set the type to
    >>>
    >>> INT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE
    >>>
    >>> which is supposed to be of Long type from the jdbc type
    >>> documentation of
    >>> MySql.
    >>>
    >>> to force the id object always to be a Long but cayenne still
    >>> returns an
    >>> Integer when reading from the db.
    >>>
    >>> any ideas?
    >>>
    >>> thanks
    >>>
    >>>
    >>>
    >>>
    >>
    >>
    >>
    >>
    >
    >
    >
    >



    This archive was generated by hypermail 2.0.0 : Tue Aug 29 2006 - 08:16:47 EDT