« Return to Thread: Stability

Re: Stability

by Armin Waibel :: Rate this Message:

| View in Thread

johne wrote:

> In first testing the 1.0.5 RC, I get the error below.  This worked as is in
> 1.0.4.  Something different with the count use in the RC?
>
> Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to
> java.lang.Long which comes from this line as shown in more detail below:
> count = new Integer(((Long)obj[2]).intValue());
>
>
> This came out of getting a count out of a ReportByCriteria result set.
>
> Where the columns look like:
>        private static final String[] crColumns = new String[]{"countryId",
> "regionId", "count(countryId)","count(regionId)"};
>        ReportQueryByCriteria query = new
> ReportQueryByCriteria(specificActiveServiceLocationQueryVO,
>                 crColumns, crit, true);
> .....
> .....
> obj = (Object[]) resultsIt.next();
> count = new Integer(((Long)obj[2]).intValue());
>

This could be jdbc-driver issue. If OJB doesn't know the field (detect a
not mapped field), in your case the count(...) field, the jdbc-type is
resolved by using the ResultSet metadata (rsMetaData.getColumnType(...))
of the jdbc-driver.

You can try to use the query.setJdbcTypes method to specify the
sql-types, then OJB resolves the proper java-jdbc-types
http://db.apache.org/ojb/docu/guides/jdbc-types.html

int types[] = new int[]{Types.DECIMAL, Types.VARCHAR, Types.BIGINT};
ReportQueryByCriteria q = QueryFactory.newReportQuery(Person.class, crit);
q.setAttributes(new String[]{"id", "firstname", "count(*)"});
q.setJdbcTypes(types);

This should work for all none mapped query fields. If the field is
mapped the type setting will be ignored - this is a bug and will be
fixed in 1.0.5rc2.

regards,
Armin

>
>
>
> -----
> JohnE
>
> http://jobbank.com/ jobbank.com

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@...
For additional commands, e-mail: ojb-user-help@...

 « Return to Thread: Stability