Return-Path: Delivered-To: apmail-openjpa-dev-archive@www.apache.org Received: (qmail 41122 invoked from network); 2 May 2009 00:39:54 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 2 May 2009 00:39:54 -0000 Received: (qmail 56697 invoked by uid 500); 2 May 2009 00:39:54 -0000 Delivered-To: apmail-openjpa-dev-archive@openjpa.apache.org Received: (qmail 56638 invoked by uid 500); 2 May 2009 00:39:53 -0000 Mailing-List: contact dev-help@openjpa.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@openjpa.apache.org Delivered-To: mailing list dev@openjpa.apache.org Received: (qmail 56628 invoked by uid 99); 2 May 2009 00:39:53 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 02 May 2009 00:39:53 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.140] (HELO brutus.apache.org) (140.211.11.140) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 02 May 2009 00:39:51 +0000 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id 5B55B234C003 for ; Fri, 1 May 2009 17:39:30 -0700 (PDT) Message-ID: <780845212.1241224770359.JavaMail.jira@brutus> Date: Fri, 1 May 2009 17:39:30 -0700 (PDT) From: "Fay Wang (JIRA)" To: dev@openjpa.apache.org Subject: [jira] Updated: (OPENJPA-1057) Foreign keys are not properly set for ConstraintUpdateManager to determine the correct order of the sql In-Reply-To: <1158784210.1241134530381.JavaMail.jira@brutus> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 X-Virus-Checked: Checked by ClamAV on apache.org [ https://issues.apache.org/jira/browse/OPENJPA-1057?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Fay Wang updated OPENJPA-1057: ------------------------------ Description: In the following situations, foreign keys are not properly set in the RowImpl for ConstraintUpdateManager to correctly determine the order of sql: (1) bottom-up table creation for primary table and secondary table with foreign key referencing the primary table: Both primary and secondary tables are used to store the data in an entity, which has the annotation as below: @Table(name="Tbl1") @SecondaryTable(name="Tbl2",pkJoinColumns=@PrimaryKeyJoinColumn(name="ID")) public class EntityA implements Serializable { ... } In this situation, Openjpa fails to record the foreign key information in the secondary row. Without the foreign key constraint information, the ConstraintUpdateManager is unable to determine the ordering correctly. (2) bottom up table creation for an entity and its toOne/toMany relation with foreign key constraint. For example: create table Bidir1to1A (id integer not null, age integer not null, name varchar(30), primary key (id)); create table Bidir1to1B (id integer not null, name varchar(30), entitya_id integer, primary key (id)); alter table Bidir1to1B add constraint FK452ACC2BD7410520 foreign key (entitya_id) references Bidir1to1A; In this situation, Openjpa reads in the database foreign key constraint. However, this foreign key constraint is not recorded in the RowImpl due to the deleteAction = ForeignKey.ACTION_NONE. The lack of foreign key constraint information in the RowImpl leads to the wrong ordering of the sql by the ConstraintUpdateManager. (3) top-down table creation with the following entity defintion: @Entity @Table(name="EntityA") public class Unidir1to1A implements IUnidir1to1A, Serializable { private static final long serialVersionUID = -1734942085082845941L; @Id Integer id; @OneToOne(cascade=CascadeType.REMOVE) @ForeignKey(deleteAction=ForeignKeyAction.DEFAULT) public Unidir1to1B entityb; The deleteAction set to ForeignKeyAction.DEFAULT is translated to ForeignKey.ACTION_NONE (for DB2 at least). As in case (2) above, this leads to missing foreign key constraint in the RowImpl, resulting in wrong ordering of the sql. Note that the wrong ordering of sql means that the sql that insert into the parent table is not executed prior to the sql that insert into the child table. The fix is: (1) add foreign key constraint to the RowImpl when @SecondaryTable is used (2) record foreign key constraint regardless of ForeignKey delete action. was:ConstraintUpdateManager fails to order the update/insert/delete rows properly when @SecondaryTable is used to store the entity in different tables. Summary: Foreign keys are not properly set for ConstraintUpdateManager to determine the correct order of the sql (was: ConstraintUpdateManager fails to order the update/insert/delete rows properly when @SecondaryTable is used) > Foreign keys are not properly set for ConstraintUpdateManager to determine the correct order of the sql > ------------------------------------------------------------------------------------------------------- > > Key: OPENJPA-1057 > URL: https://issues.apache.org/jira/browse/OPENJPA-1057 > Project: OpenJPA > Issue Type: Bug > Components: jdbc > Affects Versions: 2.0.0 > Reporter: Fay Wang > Assignee: Fay Wang > Fix For: 2.0.0 > > > In the following situations, foreign keys are not properly set in the RowImpl for ConstraintUpdateManager to correctly determine the order of sql: > (1) bottom-up table creation for primary table and secondary table with foreign key referencing the primary table: Both primary and secondary tables are used to store the data in an entity, which has the annotation as below: > @Table(name="Tbl1") > @SecondaryTable(name="Tbl2",pkJoinColumns=@PrimaryKeyJoinColumn(name="ID")) > public class EntityA implements Serializable { > > ... > } > In this situation, Openjpa fails to record the foreign key information in the secondary row. Without the foreign key constraint information, the ConstraintUpdateManager is unable to determine the ordering correctly. > (2) bottom up table creation for an entity and its toOne/toMany relation with foreign key constraint. For example: > create table Bidir1to1A (id integer not null, age integer not null, name varchar(30), primary key (id)); > create table Bidir1to1B (id integer not null, name varchar(30), entitya_id integer, primary key (id)); > alter table Bidir1to1B add constraint FK452ACC2BD7410520 foreign key (entitya_id) references Bidir1to1A; > In this situation, Openjpa reads in the database foreign key constraint. However, this foreign key constraint is not recorded in the RowImpl due to the deleteAction = ForeignKey.ACTION_NONE. The lack of foreign key constraint information in the RowImpl leads to the wrong ordering of the sql by the ConstraintUpdateManager. > (3) top-down table creation with the following entity defintion: > @Entity > @Table(name="EntityA") > public class Unidir1to1A implements IUnidir1to1A, Serializable { > private static final long serialVersionUID = -1734942085082845941L; > @Id > Integer id; > @OneToOne(cascade=CascadeType.REMOVE) > @ForeignKey(deleteAction=ForeignKeyAction.DEFAULT) > public Unidir1to1B entityb; > The deleteAction set to ForeignKeyAction.DEFAULT is translated to ForeignKey.ACTION_NONE (for DB2 at least). As in case (2) above, this leads to missing foreign key constraint in the RowImpl, resulting in wrong ordering of the sql. > Note that the wrong ordering of sql means that the sql that insert into the parent table is not executed prior to the sql that insert into the child table. > The fix is: > (1) add foreign key constraint to the RowImpl when @SecondaryTable is used > (2) record foreign key constraint regardless of ForeignKey delete action. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.