Hi Jakob, Yes, your patch did the trick! No more selects with id = null. Thanks!
Gerhard Jakob Braeuchi <[EMAIL PROTECTED]> 15.10.2003 17:56 An: [EMAIL PROTECTED] Kopie: Thema: [Fwd: Re: Antwort: RE: How to map optional 1:1 relationship] ----- Nachricht von Jakob Braeuchi <[EMAIL PROTECTED]> auf Wed, 15 Oct 2003 17:49:54 +0200 ----- An: OJB Users List <[EMAIL PROTECTED]> Thema: Re: Antwort: RE: How to map optional 1:1 relationship hi gerhard, sorry, i posted to wrong code. this is it: protected void associateBatched(Collection owners, Collection children) { ObjectReferenceDescriptor ord = getObjectReferenceDescriptor(); ClassDescriptor cld = getOwnerClassDescriptor(); Object owner, relatedObject; Object fkValues[]; Identity id; PersistenceBroker pb = getBroker(); PersistentField field = ord.getPersistentField(); Class topLevelClass = pb.getTopLevelClass(ord.getItemClass()); Iterator iter = owners.iterator(); while (iter.hasNext()) { owner = iter.next(); fkValues = ord.getForeignKeyValues(owner,cld); if (!isNull(fkValues)) { id = new Identity(null, topLevelClass, fkValues); relatedObject = pb.getObjectByIdentity(id); } else { relatedObject = null; } field.set(owner, relatedObject); } } jakob [EMAIL PROTECTED] wrote: > hi again, > > I think this is indeed the reason. In my log files those selects almost > always occur right after prefetch queries. And in the few cases they > don't, it may just be that there was no non-null FK to prefetch. > > Method ReferencePrefetcher#buildPrefetchQueries already checks for isNull(fkValues) so > #associateBatched should probably do the same. > > Gerhard > > > > > > Jakob Braeuchi <[EMAIL PROTECTED]> > 15.10.2003 17:17 > Bitte antworten an "OJB Users List" > > > An: OJB Users List <[EMAIL PROTECTED]> > Kopie: > Thema: Re: Antwort: RE: How to map optional 1:1 relationship > > > hi carl,gerhard, > > your right, fkValues may be null and thus a query will be fired. > can you confirm this gerhard ? > > jakob > > Boyes, Carl wrote: > > >>Hi Jakob, Gerhard >> >>In ReferencePrefetcher#associateBatched: >> >>... >> while (iter.hasNext()) >> { >> owner = iter.next(); >> fkValues = ord.getForeignKeyValues(owner,cld); >> id = new Identity(null, topLevelClass, fkValues); >> relatedObject = pb.getObjectByIdentity(id); >> field.set(owner, relatedObject); >> } >>... >> >>Should this also be ensuring a non null foreign key value? >> >>Carl. >> >> >> >>-----Original Message----- >>From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] >>Sent: Wednesday, October 15, 2003 3:59 PM >>To: OJB Users List >>Subject: Re: Antwort: RE: How to map optional 1:1 relationship >> >> >>Hi Jakob, >> >>I just checked and you are right. >> >>Nevertheless I find a lot of statements like SELECT ... FROM ... WHERE >>id='' in my P6Spy logs, where id is a not nullable primary key. I was >>assuming these were generated from resolving references with FK=null, > > but > >>it turns out this is wrong. Looks like I'll have to do a little more >>research to find the reason for these selects... >> >>Regards, >>Gerhard >> >> >> >> >> >>Jakob Braeuchi <[EMAIL PROTECTED]> >>15.10.2003 16:10 >>Bitte antworten an "OJB Users List" >> >> >> An: OJB Users List <[EMAIL PROTECTED]> >> Kopie: >> Thema: Re: Antwort: RE: How to map optional 1:1 relationship >> >> >>hi gerhard, >> >>imo this is already implemented. see >>PersistenceBrokerImpl#getReferencedObject: >> >>... >> // BRJ: check if we have non null pk values >> // TBD we should also check primitives >> // to avoid creation of unmaterializable proxies >> for (int i = 0; i < pkVals.length; i++) >> { >> if (pkVals[i] != null) >> { >> allPkNull = false; >> break; >> } >> } >> // BRJ: if all pk values are null there's no referenced object >> if (allPkNull) >> { >> return null; >> } >>... >> >> >>The contents of this email are confidential to the intended recipient at > > the email address to which it has been addressed. It may not be disclosed > to or used by anyone other than this addressee, nor may it be copied in > any way. If received in error, please contact DLA, a UK law firm, > (http://www.dla.com/) on +44 (0) 8700 111111 quoting the name of the sender and the > addressee > and then delete it from your system. > >>Please note that neither DLA nor the sender accepts any responsibility > > for viruses and it is your responsibility to scan the email and > attachments (if any). No contracts may be concluded on behalf of DLA by > means of email communications. > >>A list of the names of the partners of DLA (who are either solicitors or > > registered foreign lawyers) and their qualifications is available for > inspection at 3 Noble Street, London, EC2V 7EE, UK. > >>Regulated by the Law Society. >> >> >> >>--------------------------------------------------------------------- >>To unsubscribe, e-mail: [EMAIL PROTECTED] >>For additional commands, e-mail: [EMAIL PROTECTED] >> >> > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > >