Re: Stability
Armin Waibel <[email protected]> Thu, 09 Oct 2008 01:38:13 +0200
| Newsgroups | gmane.comp.jakarta.ojb.user |
|---|---|
| Message-ID | <[email protected]> |
Hi JohnE,
johne wrote:
> In response to below, it worked in 1.0.3 and then 1.0.4. When I
> tried 1.0.5 it failed. I backed off to 1.0.4 again and it works. In
> all cases I use the same latest MySql database driver. No other
> changes other then the change in OJB version.
>
It's weird! I try to reproduce your issue without success. The query
include a class 'Person' and looks like this:
Criteria crit = new Criteria().addLike("firstname", "%o%")
.addAndCriteria(new Criteria().addLike("lastname", name));
ReportQueryByCriteria q = QueryFactory.newReportQuery(Person.class, crit);
q.setAttributes(new String[]{"id", "firstname", "count(id)"});
q.addGroupBy(new String[]{"id", "firstname"});
q.addOrderByAscending("firstname");
The field 'id' is mapped as Integer in the Person class-descriptor.
In the result set array the 'count(id)' column is returned as Integer
and NOT as String (using hsql and mysql). Could you give me a hint how
to reproduce your issue?
regards,
Armin
> JohnE
>
>
>
> Armin Waibel wrote:
>> 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: [email protected] For
>> additional commands, e-mail: [email protected]
>>
>>
>>
>
>
> ----- JohnE
>
> http://jobbank.com/ jobbank.com