Sorry this is Cayenne 3.1 API, and there is a typo :)

3.1: Cayenne.intPkForObject
3.0: DataObjectUtils.intPkForObject

On Mar 9, 2012, at 11:33 AM, cghersi wrote:

> Hi Andrus, 
> 
> I cannot find documentation for your proposal (Cayenne.inPkForObject): may 
> you give me an example of use?
> 
> 
> 
> Thank you very much.
> 
> Best
> 
> cghersi
> 
> 
> 
> From: Andrus Adamchik [via Cayenne] 
> [mailto:ml-node+s195n3812833...@n3.nabble.com] 
> Sent: venerdì 9 marzo 2012 15:40
> To: cghersi
> Subject: Re: Temporary ID hasn't been replaced on commit
> 
> 
> 
>> Is there any effective way to directly retrieve the ID of the just added 
>> object after the context.commitChanges() invocation? 
> 
> After commit the ID should be available via normal Cayenne APIs (e.g. 
> Cayenne.inPkForObject). So there's something else at play too. 
> 
> Andrus 
> 
> On Mar 9, 2012, at 9:10 AM, cghersi wrote: 
> 
> 
>> Hi all, perhaps I’ve understood something about the issue: 
>> 
>> Seems that the problem arises when I add a new object to the DB: just after 
>> the insert, I need the autogenerated PK, and this seems to put in troubles 
>> the method DataObjectUtils.intPKForObject(Persistent); 
>> 
>> Which sometimes throws the Exception in the subject. 
>> 
>> 
>> 
>> Is there any effective way to directly retrieve the ID of the just added 
>> object after the context.commitChanges() invocation? 
>> 
>> 
>> 
>> Thank you very much for your help. 
>> 
>> 
>> 
>> Best 
>> 
>> cghersi 
>> 
>> 
>> 
>> From: cghersi [via Cayenne] [mailto:[hidden email]] 
>> Sent: mercoledì 7 marzo 2012 09:43 
>> To: cghersi 
>> Subject: Re: Temporary ID hasn't been replaced on commit 
>> 
>> 
>> 
>> Hi Andrus, 
>> 
>> here there's the code that I use to save my object: 
>> 
>>       private AtomicReference<DataContext> context = new 
>> AtomicReference<DataContext>(config.getDomain("PacketDomain").createDataCont 
>> ext()); 
>> 
>>       public Network GetNetworkByPK(Integer pkID) { 
>>               ObjectId id = new ObjectId(Network.class.getSimpleName(), 
>> Network.ID_PK_COLUMN, pkID); 
>> 
>>               // this constructor implicitly uses "CACHE_REFRESH" policy, 
>> so a fresh object will be returned 
>>               ObjectIdQuery query = new ObjectIdQuery(id); 
>>               return 
>> (Network)DataObjectUtils.objectForQuery(context.get(), query); 
>>       } 
>> 
>>       public PhysicalNode GetPhysicalNodeByMac(byte[] macAddr){ 
>>               Expression qualifier = 
>> ExpressionFactory.matchExp(PhysicalNode.MAC_ADDRESS_PROPERTY, macAddr); 
>>               List<PhysicalNode> list = query(qualifier, 
>> PhysicalNode.class); 
>> 
>>               //there can be only a single result from this query: 
>>               return list.get(0); 
>>       } 
>> 
>>       public synchronized PhysicalNode AddPhysicalNode(byte[] macAddr, 
>> byte[] nsap, int netId, short type, 
>>                       boolean isOnline, String defaultLabel){ 
>> 
>>               PhysicalNode pn=null; 
>>               Network n = GetNetworkByPK(netId); 
>>               if(n!=null){ 
>>                       pn = GetPhysicalNodeByMac(macAddr); 
>>                       if(pn==null){ 
>>                               pn = createNewObj(PhysicalNode.class); 
>>                               pn.setMacAddress(macAddr); 
>>                               pn.setLabel(defaultLabel); 
>>                               pn.setCoordX((double)-1); 
>>                               pn.setCoordY((double)-1); 
>>                               pn.setCoordZ((double)-1); 
>>                               pn.setCreation((new Date()).getTime()); 
>>                       } 
>>                       pn.setNetwork(n); 
>>                       pn.setNsap(nsap); 
>>                       pn.setType(type); 
>>                       pn.setIsOnline(isOnline); 
>>                       CommitObjects(PhysicalNode.class); 
>>               } 
>>               else{ 
>>                       throw new ValidationException("Network not in DB"); 
>>               } 
>>               return pn; 
>>       } 
>> 
>> The problem is not systematic, but may occur with randomness if I force the 
>> DB to add a great number of PhysicalNode objects in a little time window. 
>> 
>> Please, let me know if you have any idea! 
>> 
>> Thank you very much 
>> Best 
>> cghersi 
>> 
>> _____   
> 
> 
> 
> 
> 
>  _____  
> 
> If you reply to this email, your message will be added to the discussion 
> below:
> 
> http://cayenne.195.n3.nabble.com/Temporary-ID-hasn-t-been-replaced-on-commit-tp3801043p3812833.html
>  
> 
> To unsubscribe from Temporary ID hasn't been replaced on commit, click here 
> <http://cayenne.195.n3.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=3801043&code=Y3Jpc3RpYW5vLmdoZXJzaUBhYm9kYXRhLmNvbXwzODAxMDQzfDUzMzUzMjY3>
>  .
> <http://cayenne.195.n3.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>  NAML 
> 
> 
> 
> --
> View this message in context: 
> http://cayenne.195.n3.nabble.com/Temporary-ID-hasn-t-been-replaced-on-commit-tp3801043p3813158.html
> Sent from the Cayenne - User mailing list archive at Nabble.com.

Reply via email to