On 10/06/2008, at 5:37 PM, Andrus Adamchik wrote:

On Jun 10, 2008, at 10:31 AM, Lachlan Deck wrote:

Perhaps I should describe what I'm actually doing. All I need is a way to get a count of a select query (without having to fault in all the related objects). So is there a way to trigger that, in order to just get a count back, with a SelectQuery without going the sqltemplate or namedquery route?

I think EJBQL route is the way to go for aggregate object queries. In fact Expression has 'toEJBQLString' method, but you may not even care about it. Anyways here is an example:

EJBQLQuery countQuery = new EJBQLQuery("SELECT count(a) FROM Artist a WHERE a.artistName like 'A%'");
Number count = (Number) DataObjectUtils.objectForQuery(countQuery);

Okay, so I've got this...
public int allRecordsCount(Expression e) {
ObjEntity entity = getContext().getEntityResolver().lookupObjEntity(getObjectClass());
        Expression qualifier = null;
        <...>
String ejbqlWhereString = qualifier == null ? "" : " WHERE " + qualifier.toEJBQL("a"); String ejbqlQueryString = "SELECT count(a) FROM " + entity.getName() + " a" + ejbqlWhereString;
        EJBQLQuery ejbqlQuery = new EJBQLQuery(ejbqlQueryString);
Number count = (Number) DataObjectUtils.objectForQuery(getContext(), ejbqlQuery);
        return count.intValue();
}

But I'm getting this exception. Any ideas?

org.apache.cayenne.CayenneRuntimeException: [v.3.0-SNAPSHOT May 14 2008 22:35:23] Remote error. URL - http://delish.ish.com.au:8181/angel-server-cayenne ; CAUSE - Serialized class org.apache.cayenne.query.SQLResultSetMapping must implement java.io.Serializable [java] at org .apache .cayenne .remote.hessian.HessianConnection.doSendMessage(HessianConnection.java: 147) [java] at org .apache.cayenne.remote.BaseConnection.sendMessage(BaseConnection.java: 73) [java] at org.apache.cayenne.remote.ClientChannel.send(ClientChannel.java:281) [java] at org.apache.cayenne.remote.ClientChannel.onQuery(ClientChannel.java:113) [java] at org .apache .cayenne .util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java: 317) [java] at org .apache .cayenne .util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:96) [java] at org.apache.cayenne.CayenneContext.onQuery(CayenneContext.java:340) [java] at org.apache.cayenne.CayenneContext.performQuery(CayenneContext.java:328) [java] at ish.oncourse.cayenne.CayenneContext.performQuery(CayenneContext.java: 292) [java] at org.apache.cayenne.DataObjectUtils.objectForQuery(DataObjectUtils.java: 274) [java] at ish .oncourse .controller.ListController.allRecordsCount(ListController.java:482)

with regards,
--

Lachlan Deck

Reply via email to