Return-Path: Delivered-To: apmail-db-jdo-dev-archive@www.apache.org Received: (qmail 44699 invoked from network); 17 May 2006 15:40:35 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 17 May 2006 15:40:35 -0000 Received: (qmail 99990 invoked by uid 500); 17 May 2006 15:40:26 -0000 Mailing-List: contact jdo-dev-help@db.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: jdo-dev@db.apache.org Delivered-To: mailing list jdo-dev@db.apache.org Received: (qmail 99889 invoked by uid 99); 17 May 2006 15:40:26 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 17 May 2006 08:40:26 -0700 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests=HTML_MESSAGE,SPF_HELO_PASS X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [80.67.18.15] (HELO smtprelay03.ispgateway.de) (80.67.18.15) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 17 May 2006 08:40:23 -0700 Received: (qmail 31197 invoked from network); 17 May 2006 15:40:00 -0000 Received: from unknown (HELO [192.168.100.11]) (383542@[195.143.217.178]) (envelope-sender ) by smtprelay03.ispgateway.de (qmail-ldap-1.03) with SMTP for ; 17 May 2006 15:40:00 -0000 Message-ID: <446B43D0.7000608@artnology.com> Date: Wed, 17 May 2006 17:40:00 +0200 From: =?ISO-8859-15?Q?J=F6rg_von_Frantzius?= Organization: artnology GmbH, Berlin User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8) Gecko/20051201 Thunderbird/1.5 Mnenhy/0.7.3.0 MIME-Version: 1.0 To: Apache JDO project CC: JDO Expert Group Subject: Setting a 1:1 association with "mapped-by" Content-Type: multipart/mixed; boundary="------------050102040006050505080600" X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N --------------050102040006050505080600 Content-Type: multipart/alternative; boundary="------------030404090400080500010207" --------------030404090400080500010207 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 8bit Hello JDO experts, when writing some JUnit test today I came across an interesting phenomenon. I have two classes A and B with a 1:1 association between them. The FK is put on class A, and the corresponding field on B has "mapped-by" with the corresponding field on A (see metadata below). Now when I have the following object graph: and perform the operation a1.setB_1to1(b2) then I'd expect the object graph to look like the following: In particular, I'd expect a2 not pointing to b2 anymore, as this clearly is supposed to be is a 1:1 relationship. The implementation can determine this being a 1:1 association, as there are two corresponding fields, and consequently it should issue "UPDATE A SET B_1TO1_FK=NULL WHERE B_1TO1_FK=2" before "UPDATE A SET B_1TO1_FK=2 WHERE ID=1" to keep this being a 1:1 association. However, what I end up with in the database is: Does this really work as expected? Here's the metadata: Regards, J�rg P.S. I hope the pictures survived... --------------030404090400080500010207 Content-Type: multipart/related; boundary="------------050309010706050809080300" --------------050309010706050809080300 Content-Type: text/html; charset=ISO-8859-15 Content-Transfer-Encoding: 8bit Hello JDO experts,

when writing some JUnit test today I came across an interesting phenomenon. I have two classes A and B with a 1:1 association between them. The FK is put on class A, and the corresponding field on B has "mapped-by" with the corresponding field on A (see metadata below).

Now when I have the following object graph:
and perform the operation
a1.setB_1to1(b2)
then I'd expect the object graph to look like the following:

In particular, I'd expect a2 not pointing to b2 anymore, as this clearly is supposed to be is a 1:1 relationship. The implementation can determine this being a 1:1 association, as there are two corresponding fields, and consequently it should issue
"UPDATE A SET B_1TO1_FK=NULL WHERE B_1TO1_FK=2"
before
"UPDATE A SET B_1TO1_FK=2 WHERE ID=1"
to keep this being a 1:1 association.

However, what I end up with in the database is:
Does this really work as expected?

Here's the metadata:

��� ��� <class name="A" identity-type="application" table="A" detachable="true"
��� ��� ��� �objectid-class="javax.jdo.identity.LongIdentity"
��� ��� ��� persistence-modifier="persistence-capable">
��� ��� ��� <inheritance strategy="new-table"/>
��� ��� ��� <version strategy="version-number" column="jdoversion"/>
��� ��� ��� <field name="id" primary-key="true" persistence-modifier="persistent" value-strategy="sequence" sequence="A_SEQ" >
��� ��� ��� ��� <extension vendor-name="jpox" key="key-database-cache-size" value="100"/>
��� ��� ��� </field>
��� ��
��� ��� ��� <field name="b_1to1" column="b_1to1_FK"
��� ��� ��� ��� persistence-modifier="persistent" >
��� ��� ��� </field>��� ��� ��� ���
��� ��� </class>

��� ��� <class name="B" identity-type="application" table="B" detachable="true"
��� ��� ��� �objectid-class="javax.jdo.identity.LongIdentity"
��� ��� ��� persistence-modifier="persistence-capable">
��� ��� ��� <inheritance strategy="new-table"/>
��� ��� ��� <version strategy="version-number" column="jdoversion"/>
��� ��� ��� <field name="id" primary-key="true" persistence-modifier="persistent" value-strategy="sequence" sequence="B_SEQ" >
��� ��� ��� ��� <extension vendor-name="jpox" key="key-database-cache-size" value="100"/>
��� ��� ��� </field>
��� ��
��� ��� ��� <field name="a_1to1" mapped-by="b_1to1"
��� ��� ��� ��� persistence-modifier="persistent" >
��� ��� ��� </field>��� ��� ��� ���
��� ��� </class>


Regards,
J�rg

P.S.
I hope the pictures survived...
--------------050309010706050809080300 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-ID: /9j/4AAQSkZJRgABAQIAJgAmAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRof Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwh MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAAR CABBAKcDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDY0DQNM1bRLTWNYs4NU1PUoku7m6vYUldn dAcDIwqgYVVGAABxWn/wiXhv/oXtJ/8AAKP/AAo8Jf8AImaF/wBg+3/9FrVLxN4guNE8yWFo mS3tzcSQi1lneQDPBZPlgB2kB33Andx8hz7KUIwTaPJblKTSZd/4RLw3/wBC9pP/AIBR/wCF H/CJeG/+he0n/wAAo/8ACoZbfy/HllOZpXMun3QCs3yoA9twoHA5JJPJOeuAoG9VKMXfQltr qc9p/ifTfhtJr0U6ak+jxRW13BaWtuZUt3lklSQK2AsSkqrBWYDJbaMnFUND+Ph8Q+N7DS7f RJLfS5HmEsmyS5uJFCM0ZWOJcqcr8ww/B6jGa7bwl/yOeu/9g+x/9GXVbQ8HeHF8QW+vR6Pa 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 --------------050309010706050809080300 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-ID: /9j/4AAQSkZJRgABAQIAJgAmAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRof Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwh MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAAR CABBAKcDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDY0DQNM1bRLTWNYs4NU1PUoku7m6vYUldn dAcDIwqgYVVGAABxWn/wiXhv/oXtJ/8AAKP/AAo8Jf8AImaF/wBg+3/9FrVLxN4guNE8yWFo mS3tzcSQi1lneQDPBZPlgB2kB33Andx8hz7KUIwTaPJblKTSZd/4RLw3/wBC9pP/AIBR/wCF H/CJeG/+he0n/wAAo/8ACoZbfy/HllOZpXMun3QCs3yoA9twoHA5JJPJOeuAoG9VKMXfQltr qYWi+JtC+HWp6rYalfz2WjOlvcWkP2eSWKCWRp/MVCiHYG8sMEJxneVHWuhsPi/4E1PUbaws 9d8y6upUhhT7JONzsQFGSmBkkdah8P2FnqfifxBZ39pBd2smn2G+GeMSI2JbojKng4IB/CuV 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 --------------050309010706050809080300 Content-Type: image/jpeg; name="moz-screenshot-5.jpg" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="moz-screenshot-5.jpg" /9j/4AAQSkZJRgABAQIAJgAmAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRof Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwh MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAAR CABBAKcDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDY0DQNM1bRLTWNYs4NU1PUoku7m6vYUldn dAcDIwqgYVVGAABxWn/wiXhv/oXtJ/8AAKP/AAo8Jf8AImaF/wBg+3/9FrVLxN4guNE8yWFo mS3tzcSQi1lneQDPBZPlgB2kB33Andx8hz7KUIwTaPJblKTSZd/4RLw3/wBC9pP/AIBR/wCF H/CJeG/+he0n/wAAo/8ACoZbfy/HllOZpXMun3QCs3yoA9twoHA5JJPJOeuAoG9VKMXfQltr qYWi+JtC+HWp6rYalfz2WjOlvcWkP2eSWKCWRp/MVCiHYG8sMEJxneVHWuhsPi/4E1PUbaws 9d8y6upUhhT7JONzsQFGSmBkkdah8P2FnqfifxBZ39pBd2smn2G+GeMSI2JbojKng4IB/CuV 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 CiiigAooooA//9k= --------------050309010706050809080300-- --------------030404090400080500010207-- --------------050102040006050505080600--