I guess I need to run it in debugger with this driver version. I still suspect 
some NUMERIC ambiguity issue. 

Andrus

On Oct 5, 2012, at 5:04 PM, Emanuele Maiarelli <[email protected]> 
wrote:

> Problem persists after upgrading to cayenne 3.1B1.
> 
> org.apache.cayenne.CayenneRuntimeException: [v.3.1B1 May 28 2012 20:59:56]
> Can't find id for {<ObjectId:Comuni, comuni_pk=4615>; committed;
> [toProvince=>?; anagraficheArray=>(..); comuniCap=>55049;
> comuniComIstat=>33; comuniCfPrefix=>L833; anagraficheArraySl=>(..);
> comuniDesc=>PROVA]}
>    at
> org.apache.cayenne.access.IncrementalFaultList$IncrementalListHelper.updateWithResolvedObjectInRange(IncrementalFaultList.java:677)
>    at
> org.apache.cayenne.access.IncrementalFaultList.resolveInterval(IncrementalFaultList.java:284)
>    at
> org.apache.cayenne.access.IncrementalFaultList.get(IncrementalFaultList.java:526)
>    at
> org.apache.cayenne.access.IncrementalFaultList$1.next(IncrementalFaultList.java:443)
> 
> Exception arise when running a paginated query, after to calling "toComuni"
> method. Not paginated query instead works, as per cayenne 3.0.2.
> 
> Anyway underlaying database isn't oracle but postgress 9.1, jdbc driver
> postgresql-9.1-901.jdbc4.jar.
> 
> 
> 2012/10/5 Andrus Adamchik <[email protected]>
> 
>> Hi,
>> 
>>> If i call the method "toComuni" via reflection it fetchs the related
>>> object, but puts it in Hollow state (ex: {<ObjectId:Comuni,
>>> comuni_pk=4615>; hollow; []}).
>>> 
>>> I also noticed that if i fetch all "Comuni" objects with a select query,
>>> before calling "toComuni" method via reflection, the object state is
>>> correcly as Committed.
>> 
>> 
>> This is expected. Relationships are read lazily. An object read via a
>> to-one relationship stays hollow until you call any of its methods. This
>> shouldn't cause any problems.
>> 
>>> org.apache.cayenne.CayenneRuntimeException: [v.3.0.2 Jun 11 2011
>> 09:26:09]
>>> Can't find id for {<ObjectId:Comuni, comuni_pk=4615>; committed;
>>> [toProvince=>?; anagraficheArray=>(..); comuniCap=>55049;
>>> comuniComIstat=>33; comuniCfPrefix=>L833; anagraficheArraySl=>(..);
>>> comuniDesc=>PROVA]}
>>>   at
>>> 
>> org.apache.cayenne.access.IncrementalFaultList$IncrementalListHelper.updateWithResolvedObjectInRange(IncrementalFaultList.java:701)
>>>   at
>> 
>> My guess is that with Oracle NUMERIC Cayenne may read a value for
>> "comuni_pk" as a different Java type, depending on whether the object was
>> read via relationship or directly from DB. (e.g. Integer vs. BigDecimal or
>> something). We had those issues before. If you run this in debugger and
>> poke inside ObjectId for Comuni, you will see whether this is the case.
>> 
>> Now how to fix it… first thing to try is to upgrade a step further to
>> Cayenne 3.1B1, as it addressed a few of those issues. If that doesn't help,
>> we'll keep looking further.
>> 
>> Andrus
>> 
>> 
>> 
>> On Oct 5, 2012, at 2:02 AM, Emanuele Maiarelli <
>> [email protected]> wrote:
>> 
>>> I tried to figureout a workaround to objects in hollow state.
>>> 
>>> Object value = toCall.invoke(p); // <- p is the getToComuni method
>>>           if (value instanceof Persistent)
>>>           {
>>>               Persistent pr=(Persistent)value;
>>> 
>>>               if (pr.getPersistenceState()==PersistenceState.HOLLOW)
>>>               {
>>>                   c.add(value);
>>> 
>> value=DataObjectUtils.objectForPK(Factory.getContext(),
>>> pr.getObjectId());
>>> 
>>>               }
>>> 
>>> 
>>>           }
>>> 
>>> the object after calling "DataObjectUtils.objectForPK(" comes i the
>> correct
>>> "Commited" state, but however fetching all "comuni" objects after
>> reflection
>>> throw the same exception, when the query is paginated.
>>> 
>>> That's the stack trace:
>>> 
>>> org.apache.cayenne.CayenneRuntimeException: [v.3.0.2 Jun 11 2011
>> 09:26:09]
>>> Can't find id for {<ObjectId:Comuni, comuni_pk=4615>; committed;
>>> [toProvince=>?; anagraficheArray=>(..); comuniCap=>55049;
>>> comuniComIstat=>33; comuniCfPrefix=>L833; anagraficheArraySl=>(..);
>>> comuniDesc=>PROVA]}
>>>   at
>>> 
>> org.apache.cayenne.access.IncrementalFaultList$IncrementalListHelper.updateWithResolvedObjectInRange(IncrementalFaultList.java:701)
>>>   at
>>> 
>> org.apache.cayenne.access.IncrementalFaultList.resolveInterval(IncrementalFaultList.java:306)
>>>   at
>>> 
>> org.apache.cayenne.access.IncrementalFaultList.get(IncrementalFaultList.java:550)
>>>   at
>>> 
>> org.apache.cayenne.access.IncrementalFaultList$1.next(IncrementalFaultList.java:467)
>> 
>> 

Reply via email to