Getting used to ObjectContext may take some time when coming from other ORM 
backgrounds, but in general most people have a rather smooth ride with it.

While I can theoretically see a value of (optionally?) selecting against 
uncommitted objects, I've never had a practical case for it in my apps. Which 
can be attributed to the way how I am designing persistent code with 
ObjectContext behavior in mind. So... maybe you can explain the problem you are 
trying to solve, and we can think of a better solution?

Andrus



On Oct 15, 2010, at 11:09 AM, Mathias Clerc wrote:

> 2010/10/15 Andrey Razumovsky <razumovsky.and...@gmail.com>:
>> SelectQuery is actually a query to database, so viewing not-yet-inserted
>> objects with it is not possible. See recent discussion:
>> http://cayenne.markmail.org/search/%20list:org.apache.cayenne.user#query:%20list%3Aorg.apache.cayenne.user+page:2+mid:6bwqse4t4czj73zq+state:results
> 
> Thank you for your answers Borut and Andrey.
> 
> I was able to do what I wanted through this hackish way :
> 
>    private static List updateContentWithCurrentState(List objects,
> Class<?> objectClass, Expression e,
>            ObjectContext context) {
>        //Add new objects matching the class (limits in hierarchy, see
> isInstance doc)
>        for (Object o : context.newObjects()) {
>            if (objectClass.isInstance(o)) {
>                objects.add(o);
>            }
>        }
>        //Remove any object deleted
>        for (Object o : context.deletedObjects()) {
>            if (objects.contains(o)) {
>                objects.remove(o);
>            }
>        }
>        //Apply filter (to remove non matching objects added at the beggining)
>        if (e != null) {
>            objects = e.filterObjects(objects);
>        }
>        return objects;
>    }
> 
> Maybe it will not work in all cases, I am still early beginer but for
> my tests it was enough.
> 
> I am still puzzled by standard behaviour :
> 1) Doing context.newObject(objectClass) and then selecting doesn't
> show the new object
> 2) Doing a ((MyClass)context.preformQuery().get(0)).setName("new") and
> then selecting will return an object with the new name
> 3) Doingcontext.deleteObject(object) and then selecting still returns
> the original object
> 
> In 1) and 3) data is returned as it is in the db, but not in the
> context (DB snapshot)
> In 2) data is returned as it is in the context, but not anymore in the
> db (non DB snapshot)
> 
> Quite confusing.
> 

Reply via email to