Ciao Marco,
yes i tried activating query logging, and when using
reflection cayenne seems to be unaware of the
fact that the method is
being called and dosen't fetch the related object.
Emanuele.
On Fri,
08 Jun 2012 10:18:44 +0200, Marco Gattei wrote:
> Ciao Emanuele,
>
>
hai provato a attivare il log di Cayenne e vedere che query vengono
>
eseguite ( e se vengo eseguite ) ?
>
> Marco
>
> Il 08/06/2012 00:07,
Emanuele Maiarelli ha scritto:
>
>> I'm trying to move an application
built around cayenne 2.0.4 to 3.0.2 and im facing an odd problem. I've
some objects with 1 to n relation, that calls to a generic method
getTo...() via reflection, that returns null, even if the underlaying
database holds the correct reference. So i tested the object calling the
method without reflection it works correcty. For instance: In this case
ObjectContext newct=this.instance.getFreshContex(); // this methods
returns new CayenneContext(channel); SelectQuery sq=new
SelectQuery(Dochdrs.class); List dd=newct.performQuery(sq);
this.instance.setupPrefetch(sq, Dochdrs.class,newct, 1); for (Dochdrs
doc:dd) { System.out.println(doc.getToCentrocosti().getCcDesc()); }
setupPrefetch is coded that way: public void setupPrefetch(SelectQuery
q, Class queryClass,ObjectContext ctx,int prefLvl) { EntityResolver
resolver = ctx.getEntityResolver(); ObjEntity entity =
resolver.lookupObjEntity(queryClass); Collection
c=entity.getRelationships(); for (Object o:c) { ObjRelationship
rel=(ObjRelationship)o; if ((rel.isToMany()&& (prefLvl==1)) ||
(rel.isToMany()==false)) {
System.out.println("PREFETCH:"+rel.getName());
q.addPrefetch(rel.getName()); } } } Now if i call
doc.getToCentrocosti().getCcDesc() i see cayenne fetching the related
object. If i call doc.getToCentrocosti() via reflection seems like
cayenne dosen't fetch the related object and simply return a null
reference and no further attempts to fetch the related object are done.
Everything works correctly under 2.0.4 where cayenne seems to fetche all
related objects during the execution of the SelectQuery. Now tracking
the issue on the application isnt so immediate, i wonder if its a
cayenne 3.0.2 that dosen't supports that kinds of calls via reflection,
or the problem lies somewhere in my code. Thanks in advice, Emanuele
--