OK, RTFM to myself http://cayenne.apache.org/doc/objectidquery.html
2009/4/6 Borut Bolčina <[email protected]> > Hi, > > so if this is the table: > > create table health_monitor (id int not null, date_check datetime, primary > key (id)) engine=InnoDB; > > then this > > ObjectId id = new ObjectId("health_monitor", HealthMonitor.ID_PK_COLUMN, > 1); > HealthMonitor healthMonitor = (HealthMonitor) > DataObjectUtils.objectForQuery(dataContext, new ObjectIdQuery(id, > false, ObjectIdQuery.CACHE_REFRESH)); > Date date = healthMonitor.getDateCheck(); > > would be equivalent for > > select date_check from health_monitor where id=1; > > in plain old sql? > > I did not actually try the above code, so I don't know if it really works, > but I feel there must be a simpler way?!? > > Regards, > Borut > > 2009/4/6 Andrey Razumovsky <[email protected]>: > > The correct way to get fresh object is similiar to the method in > > DataObjectUtils: > > > > public static Object freshObjectForPK(ObjectContext context, ObjectId id) > { > > return DataObjectUtils.objectForQuery(context, new ObjectIdQuery( > > id, > > false, > > ObjectIdQuery.REFRESH)); > > } > > > > BTW right here's a method which returns one object of query result > > > > 2009/4/6 Borut Bolčina <[email protected]> > > > >> Hi, > >> > >> would it be possible to add one method in DataObjectUtils, > >> > >> DataObjectA dataObjectA = DataObjectUtils.objectForPK(dataContext, > >> DataObjectA.class, 1, QueryCacheStrategy.NO_CACHE); > >> > >> which would always return a fresh object. > >> > >> > >> By the way, is this the correct way of fetching an object directly > >> from database? > >> > >> Expression e = ExpressionFactory.matchExp(DataObjectA.ID_PK_COLUMN, > "1"); > >> SelectQuery query = new SelectQuery(DataObjectA.class, e); > >> query.setCacheStrategy(QueryCacheStrategy.NO_CACHE); > >> List list = dataContext.performQuery(query); > >> > >> DataObjectA objectA= null; > >> if (list.size() > 0) { > >> objectA= (DataObjectA) list.get(0); > >> } > >> > >> The above code would still use object cache, right, so I will not be > >> getting the object with values as set in database (maybe changed by > >> 3rd party process). How to overcome this in the above code? > >> > >> Also, wouldn't it be convenient if performQuery could return just one > >> object so we do not have to always type the boilerplate > >> if(list.size>0) ? > >> > >> Regards, > >> Borut > >> > > > >
