how isDetached(object) works?

2 messages Options
Embed this post
Permalink
Anurag Rai

how isDetached(object) works?

Reply Threaded More More options
Print post
Permalink
Hi ,
I want to understand why isDetached is using find. I thought it would be as simple as reading a boolean variable which is set if detach is caaled on that particular entity.  Furthermore i am not getting the comment below:

         // not a part of Query result load. Look into the slices till found
        List<SliceStoreManager> targets = getTargets(fetch);
        for (SliceStoreManager slice : targets) {
            if (slice.initialize(sm, state, fetch, edata)) {
                assignSlice(sm, slice.getName());
                return true;
            }
        }
   
Stack:
            DistributedJDBCStoreManager.initialize(OpenJPAStateManager, PCState, FetchConfiguration, Object) line: 399  
            ROPStoreManager(DelegatingStoreManager).initialize(OpenJPAStateManager, PCState, FetchConfiguration, Object) line: 111  
            ROPStoreManager.initialize(OpenJPAStateManager, PCState, FetchConfiguration, Object) line: 57  
            DistributedBrokerImpl(BrokerImpl).initialize(StateManagerImpl, boolean, FetchConfiguration, Object) line: 996  
            DistributedBrokerImpl(BrokerImpl).find(Object, FetchConfiguration, BitSet, Object, int, FindCallbacks) line: 954  
            DistributedBrokerImpl(BrokerImpl).find(Object, FetchConfiguration, BitSet, Object, int) line: 876  
            DistributedBrokerImpl(BrokerImpl).isDetached(Object) line: 4405  
            SingleFieldManager.persist(OpCallbacks) line: 257  
            StateManagerImpl.cascadePersist(OpCallbacks) line: 2962  
            DistributedBrokerImpl(BrokerImpl).persist(Object, Object, boolean, OpCallbacks) line: 2561  
            DistributedBrokerImpl.persist(Object, Object, boolean, OpCallbacks) line: 96  
            DistributedBrokerImpl(BrokerImpl).persist(Object, OpCallbacks) line: 2383  
            DelegatingBroker.persist(Object, OpCallbacks) line: 1039  
            EntityManagerImpl.persist(Object) line: 681  
            Main.main(String[]) line: 52    
ashishpaliwal

Re: how isDetached(object) works?

Reply Threaded More More options
Print post
Permalink
Hi,

Say we have 2 entities person and Address where person class has an object
of class Address. Now, consider the case where I am persisting the person
object. There can be three mutually exclusive cases:

   - If the corresponding Address object is persisted using the same entity
   manager during the same transaction and entity manager is not closed till
   now, than address entity is not detached till now. In this case find won't
   be called.
   - If we query for some address object and then set the corresponding
   address field of the Person class using the result set of that query
   object(assuming single result) in this case also, if the entity manager is
   not closed till now then entity is not detached and find won't be called.
   - In case where we are persisting Person and we have created Address
   object in the same transaction but have not persisted it, then in this case
   pcIsDetached() will return null as detached state is not known. In this case
   find will be called and query will be fired to database to search for the
   address entity.
   - In case where entity manager is closed then pcIsDetached() will return
   true as the entity is detached because of closing of entity manager. In this
   case also find won't be called.

So, whenever we are not sure of the detached state of the object, then only
find is called.

thanks

On Sat, Jun 6, 2009 at 9:55 AM, Anurag Rai <[hidden email]> wrote:

>
> Hi ,
> I want to understand why isDetached is using find. I thought it would be as
> simple as reading a boolean variable which is set if detach is caaled on
> that particular entity.  Furthermore i am not getting the comment below:
>
>         // not a part of Query result load. Look into the slices till found
>        List<SliceStoreManager> targets = getTargets(fetch);
>        for (SliceStoreManager slice : targets) {
>            if (slice.initialize(sm, state, fetch, edata)) {
>                assignSlice(sm, slice.getName());
>                return true;
>            }
>        }
>
> Stack:
>            DistributedJDBCStoreManager.initialize(OpenJPAStateManager,
> PCState, FetchConfiguration, Object) line: 399
>
> ROPStoreManager(DelegatingStoreManager).initialize(OpenJPAStateManager,
> PCState, FetchConfiguration, Object) line: 111
>            ROPStoreManager.initialize(OpenJPAStateManager, PCState,
> FetchConfiguration, Object) line: 57
>            DistributedBrokerImpl(BrokerImpl).initialize(StateManagerImpl,
> boolean, FetchConfiguration, Object) line: 996
>            DistributedBrokerImpl(BrokerImpl).find(Object,
> FetchConfiguration, BitSet, Object, int, FindCallbacks) line: 954
>            DistributedBrokerImpl(BrokerImpl).find(Object,
> FetchConfiguration, BitSet, Object, int) line: 876
>            DistributedBrokerImpl(BrokerImpl).isDetached(Object) line: 4405
>            SingleFieldManager.persist(OpCallbacks) line: 257
>            StateManagerImpl.cascadePersist(OpCallbacks) line: 2962
>            DistributedBrokerImpl(BrokerImpl).persist(Object, Object,
> boolean, OpCallbacks) line: 2561
>            DistributedBrokerImpl.persist(Object, Object, boolean,
> OpCallbacks) line: 96
>            DistributedBrokerImpl(BrokerImpl).persist(Object, OpCallbacks)
> line: 2383
>            DelegatingBroker.persist(Object, OpCallbacks) line: 1039
>            EntityManagerImpl.persist(Object) line: 681
>            Main.main(String[]) line: 52
> --
> View this message in context:
> http://n2.nabble.com/how-isDetached%28object%29-works--tp3034237p3034237.html
> Sent from the OpenJPA Users mailing list archive at Nabble.com.
>
>


--
Ashish Paliwal
Mobile : 9305128367
IIT Kanpur
India