Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id DA230200CFE for ; Fri, 8 Sep 2017 16:30:42 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id D7C5D160C3A; Fri, 8 Sep 2017 14:30:42 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 28BB71609D7 for ; Fri, 8 Sep 2017 16:30:42 +0200 (CEST) Received: (qmail 97536 invoked by uid 500); 8 Sep 2017 14:30:40 -0000 Mailing-List: contact user-help@cayenne.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user@cayenne.apache.org Delivered-To: mailing list user@cayenne.apache.org Received: (qmail 97525 invoked by uid 99); 8 Sep 2017 14:30:39 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 08 Sep 2017 14:30:39 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id 553A918FDB3 for ; Fri, 8 Sep 2017 14:30:39 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 2.3 X-Spam-Level: ** X-Spam-Status: No, score=2.3 tagged_above=-999 required=6.31 tests=[HTML_MESSAGE=2, KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_DNSWL_LOW=-0.7] autolearn=disabled Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id U0f6IBYK8Nzh for ; Fri, 8 Sep 2017 14:30:36 +0000 (UTC) Received: from mail-03.1984.is (mail-03.1984.is [93.95.224.70]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTPS id 6284E5FCB9 for ; Fri, 8 Sep 2017 14:30:36 +0000 (UTC) Received: from localhost by mail-03.1984.is with esmtpsa (TLSv1.2:DHE-RSA-AES256-GCM-SHA384:256) (Exim 4.84_2) (envelope-from ) id 1dqKIe-0001Kk-64 for user@cayenne.apache.org; Fri, 08 Sep 2017 14:30:28 +0000 From: Hugi Thordarson Content-Type: multipart/alternative; boundary="Apple-Mail=_10984E86-E56D-4ABF-B554-CC1D3E02AA7B" Mime-Version: 1.0 (Mac OS X Mail 10.3 \(3273\)) Subject: Re: Exception when adding a new object to two different relationships Date: Fri, 8 Sep 2017 14:30:28 +0000 References: To: user@cayenne.apache.org In-Reply-To: Message-Id: <2B5B5531-F27B-4701-A337-48B6A6D5B2F3@karlmenn.is> X-Mailer: Apple Mail (2.3273) archived-at: Fri, 08 Sep 2017 14:30:43 -0000 --Apple-Mail=_10984E86-E56D-4ABF-B554-CC1D3E02AA7B Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Hi Amadeo, thanks for the pointer. No, the reverse relationship doesn't matter (and = removing it doesn't help). I have now removed it in the github repo. And this is reproducible in different projects, I just created this = smalll project to serve as an isolated runnable example. - hugi > On 8 Sep 2017, at 14:20, Amedeo Mantica wrote: >=20 > I see an untitledRel in the Model, it looks like to be a stub inverse = relationship... have you tried to remove it ? >=20 > Amedeo >=20 >> On 8 Sep 2017, at 14:05, Hugi Thordarson wrote: >>=20 >> Hi all, >> I'm encountering what I believe to be a bug, that someone more = familiar with Cayenne's internals than me might want to take a look at = :) >>=20 >> In short: If I create a new DataObject, add it to two different = relationships on another object and then attempt to commit the whole = thing=E2=80=94it fails. >>=20 >> Consider the following code: >>=20 >> ObjectContext oc =3D createContext(); >> Person person =3D oc.newObject( Person.class ); >> Address address =3D oc.newObject( Address.class ); >> person.addToAddresses( address ); >> person.setLatestAddress( address ); >>=20 >> oc.commitChanges(); >>=20 >> This will result in the following exception: >>=20 >> Exception in thread "main" = org.apache.cayenne.CayenneRuntimeException: [v.4.1.M1-SNAPSHOT Aug 31 = 2017 12:03:09] Can't extract a master key. Missing key (id), master ID = () >> at = org.apache.cayenne.access.DataDomainSyncBucket$PropagatedValueFactory.get(= DataDomainSyncBucket.java:290) >> at = org.apache.cayenne.query.BatchQueryRow.getValue(BatchQueryRow.java:64) >> at = org.apache.cayenne.query.InsertBatchQuery$1.getValue(InsertBatchQuery.java= :63) >> at = org.apache.cayenne.access.translator.batch.InsertBatchTranslator.doUpdateB= indings(InsertBatchTranslator.java:121) >> at = org.apache.cayenne.access.translator.batch.DefaultBatchTranslator.updateBi= ndings(DefaultBatchTranslator.java:78) >> at = org.apache.cayenne.access.jdbc.BatchAction.runAsIndividualQueries(BatchAct= ion.java:163) >> at = org.apache.cayenne.access.jdbc.BatchAction.performAction(BatchAction.java:= 87) >> at = org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction= .java:97) >> at = org.apache.cayenne.access.DataNode.performQueries(DataNode.java:293) >> at = org.apache.cayenne.access.DataDomainFlushAction.runQueries(DataDomainFlush= Action.java:233) >> at = org.apache.cayenne.access.DataDomainFlushAction.flush(DataDomainFlushActio= n.java:153) >> at = org.apache.cayenne.access.DataDomain.onSyncFlush(DataDomain.java:633) >> at = org.apache.cayenne.access.DataDomain.onSyncNoFilters(DataDomain.java:603) >> at = org.apache.cayenne.access.DataDomain$DataDomainSyncFilterChain.onSync(Data= Domain.java:764) >> at = org.apache.cayenne.tx.TransactionFilter$1.perform(TransactionFilter.java:7= 3) >> at = org.apache.cayenne.tx.TransactionFilter$1.perform(TransactionFilter.java:7= 0) >> at = org.apache.cayenne.tx.DefaultTransactionManager.performInTransaction(Defau= ltTransactionManager.java:87) >> at = org.apache.cayenne.tx.DefaultTransactionManager.performInLocalTransaction(= DefaultTransactionManager.java:59) >> at = org.apache.cayenne.tx.DefaultTransactionManager.performInTransaction(Defau= ltTransactionManager.java:52) >> at = org.apache.cayenne.tx.DefaultTransactionManager.performInTransaction(Defau= ltTransactionManager.java:40) >> at = org.apache.cayenne.tx.TransactionFilter.onSync(TransactionFilter.java:70) >> at = org.apache.cayenne.access.DataDomain$DataDomainSyncFilterChain.onSync(Data= Domain.java:764) >> at = org.apache.cayenne.access.DataDomain.onSync(DataDomain.java:590) >> at = org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:742) >> at = org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:691) >> at pktest.Main.main(Main.java:28) >>=20 >>=20 >>=20 >> If someone would like to have a look, I've created a project that = replicates the problem=E2=80=94just build it and run pktest.Main >>=20 >> https://github.com/hugith/pktest >>=20 >> Cheers, >> - hugi >=20 --Apple-Mail=_10984E86-E56D-4ABF-B554-CC1D3E02AA7B--