You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cayenne.apache.org by Hugi Thordarson <hu...@karlmenn.is> on 2017/02/14 16:04:29 UTC

Checking what attributes have changed in a DataObject

Hi all,
is there some easy way for me in Cayenne to get information (for example a Map) about changes that have been made to a DataObject since it was fetched?

Cheers,
- hugi

Re: Checking what attributes have changed in a DataObject

Posted by Lon Varscsak <lo...@gmail.com>.
I implemented this in my base data object class:

    public boolean hasKeyChangedFromCommittedSnapshot(String key) {

        ObjectStore objectStore =
((DataContext)getObjectContext()).getObjectStore(); // Need the object
store to access the snapshot data.

        DataRow dataRow = objectStore.getSnapshot(getObjectId()); // Get
the snapshot data.

        EntityResolver resolver = getObjectContext().getEntityResolver();

        ObjEntity entity = resolver.getObjEntity(getObjectId
().getEntityName());

        ObjAttribute attribute = entity.getAttribute(key);

        String dbAttributeName  = attribute.getDbAttributeName();

        String objAttributeName = attribute.getName();

        Object dataRowValue = (dataRow != null) ? dataRow.get(
dbAttributeName) : null;

        Object currentValue = readPropertyDirectly(objAttributeName);



        return (!Util.nullSafeEquals(dataRowValue, currentValue));

    }


On Tue, Feb 14, 2017 at 9:04 AM, Hugi Thordarson <hu...@karlmenn.is> wrote:

> Hi all,
> is there some easy way for me in Cayenne to get information (for example a
> Map) about changes that have been made to a DataObject since it was fetched?
>
> Cheers,
> - hugi

Re: Checking what attributes have changed in a DataObject

Posted by Hugi Thordarson <hu...@karlmenn.is>.
Thanks, Lon and Michael!

- hugi


> On 14. feb. 2017, at 16:20, Michael Gentry <mg...@masslight.net> wrote:
> 
> Oh, I guess that version uses a logger.  I have several versions lying
> around.  Still, same mechanics apply.
> 
> mrg
> 
> 
> On Tue, Feb 14, 2017 at 11:18 AM, Michael Gentry <mg...@masslight.net>
> wrote:
> 
>> Something similar to this?
>> 
>> https://gist.github.com/mrg/4dce22b67175c27f4047#file-
>> cayenneutils-java-L149
>> 
>> It uses stdout since I was mainly using it as a debugging tool.
>> 
>> 
>> On Tue, Feb 14, 2017 at 11:04 AM, Hugi Thordarson <hu...@karlmenn.is>
>> wrote:
>> 
>>> Hi all,
>>> is there some easy way for me in Cayenne to get information (for example
>>> a Map) about changes that have been made to a DataObject since it was
>>> fetched?
>>> 
>>> Cheers,
>>> - hugi
>> 
>> 
>> 


Re: Checking what attributes have changed in a DataObject

Posted by Michael Gentry <mg...@masslight.net>.
Oh, I guess that version uses a logger.  I have several versions lying
around.  Still, same mechanics apply.

mrg


On Tue, Feb 14, 2017 at 11:18 AM, Michael Gentry <mg...@masslight.net>
wrote:

> Something similar to this?
>
> https://gist.github.com/mrg/4dce22b67175c27f4047#file-
> cayenneutils-java-L149
>
> It uses stdout since I was mainly using it as a debugging tool.
>
>
> On Tue, Feb 14, 2017 at 11:04 AM, Hugi Thordarson <hu...@karlmenn.is>
> wrote:
>
>> Hi all,
>> is there some easy way for me in Cayenne to get information (for example
>> a Map) about changes that have been made to a DataObject since it was
>> fetched?
>>
>> Cheers,
>> - hugi
>
>
>

Re: Checking what attributes have changed in a DataObject

Posted by Hugi Thordarson <hu...@karlmenn.is>.
Hi again,

I’m now using this approach to get the changed attribute values, which works fine. But once I start looking at relationship changes, things get complicated.
I do have the foreign key values in the DataRow snapshot, but manually resolving each relationship to objects is somewhat cumbersome. Is there some way I can resolve a relationship's value from the cached snapshot?

Cheers,
- hugi


> On 14. feb. 2017, at 16:18, Michael Gentry <mg...@masslight.net> wrote:
> 
> Something similar to this?
> 
> https://gist.github.com/mrg/4dce22b67175c27f4047#file-cayenneutils-java-L149
> 
> It uses stdout since I was mainly using it as a debugging tool.
> 
> 
> On Tue, Feb 14, 2017 at 11:04 AM, Hugi Thordarson <hu...@karlmenn.is> wrote:
> 
>> Hi all,
>> is there some easy way for me in Cayenne to get information (for example a
>> Map) about changes that have been made to a DataObject since it was fetched?
>> 
>> Cheers,
>> - hugi


Re: Checking what attributes have changed in a DataObject

Posted by Michael Gentry <mg...@masslight.net>.
Something similar to this?

https://gist.github.com/mrg/4dce22b67175c27f4047#file-cayenneutils-java-L149

It uses stdout since I was mainly using it as a debugging tool.


On Tue, Feb 14, 2017 at 11:04 AM, Hugi Thordarson <hu...@karlmenn.is> wrote:

> Hi all,
> is there some easy way for me in Cayenne to get information (for example a
> Map) about changes that have been made to a DataObject since it was fetched?
>
> Cheers,
> - hugi