Re: Problems with FK contraints in Object creation.

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Tue Nov 30 2004 - 13:25:29 EST

  • Next message: Marek Wawrzyczny: "Re: Evaluating Cayenne for Java Client application"

    Jorge,

    You don't mention what DB you are using. Is it MySQL 4 by any chance?

    Cayenne does proper ordering of insert/update/delete operations, however
    if it thinks that the target DB does not support FK constraints, it
    doesn't bother to do the ordering... MySQLAdapter still lives in MySQL 3
    world, assuming that there is no constraints. So you have to explicitly
    turn on the ordering. Just follow the advise iven here:

    http://www.objectstyle.org/cayenne/lists/cayenne-user/2004/07/0054.html

    Hope this helps.

    Andrus

    > Hi,
    > I'm having problems when I create two objects and commit them. When
    > there is a FK between them, I get a
    > "java.sql.SQLException: General error, message from server: "Cannot add
    > or update a child row: a foreign key constraint fails"
    >
    > The real problem is more complex but I test this simple case and the
    > problem arises too.
    > I have two objects, SmsUser and Profile. SmsUser has a FK to Profile.
    > When I create both objects and try to commit them, I've got the
    > exception. It's because Cayenne is trying to save the SmsUser first,
    > then the Profile. The log generated is:
    >
    > INFO QueryLogger: LOCK TABLES AUTO_PK_SUPPORT WRITE
    > INFO QueryLogger: SELECT NEXT_ID FROM AUTO_PK_SUPPORT WHERE
    > TABLE_NAME = 'profile'
    > INFO QueryLogger: UPDATE AUTO_PK_SUPPORT SET NEXT_ID = NEXT_ID + 20
    > WHERE TABLE_NAME = 'profile' AND NEXT_ID = 260
    > INFO QueryLogger: UNLOCK TABLES
    > INFO QueryLogger: LOCK TABLES AUTO_PK_SUPPORT WRITE
    > INFO QueryLogger: SELECT NEXT_ID FROM AUTO_PK_SUPPORT WHERE
    > TABLE_NAME = 'smsuser'
    > INFO QueryLogger: UPDATE AUTO_PK_SUPPORT SET NEXT_ID = NEXT_ID + 20
    > WHERE TABLE_NAME = 'smsuser' AND NEXT_ID = 320
    > INFO QueryLogger: UNLOCK TABLES
    > INFO QueryLogger: --- transaction started.
    > INFO QueryLogger: --- will run 2 queries.
    > INFO QueryLogger: INSERT INTO smsuser (Name, Password,
    > Profile_idProfile, Username, idUser) VALUES (?, ?, ?, ?, ?)
    > INFO QueryLogger: [bind: 'kiko', 'º¨Äçg4×ÅEX¼-_', 260, 'kiko',
    > 320] INFO QueryLogger: *** error.
    > java.sql.SQLException: General error, message from server: "Cannot
    > add or update a child row: a foreign key constraint fails"
    >
    > I've seen there is a Issue(CAY-87
    > <http://objectstyle.org/jira/secure/ViewIssue.jspa?key=CAY-87>) open
    > about this problem but when there is a relationship cycle. This case I
    > think is differente and a very common situation.
    > I'm working with Cayenne-1.1RC3.
    > I also attach my Database Map, if it's useful to find the problem.
    >
    > Any hint?
    >
    > Thanks!!!
    >
    > Jorge



    This archive was generated by hypermail 2.0.0 : Tue Nov 30 2004 - 13:25:30 EST