I'm having a problem with selecting columns from a query using datarows. The original SQL statement was written as follows:
String sql = " select bvd.*, level, r.route_id, r.int_material_number, r.plant_id, p.plant_number" + " from bomview_detail bvd, routing r, manufacturing_plant p" + " where bvd.bomview_id = " + viewId + " and r.plant_id=p.plant_id"+ " and r.bomview_detail_id=bvd.bomview_detail_id"+ " connect by prior bvd.bomview_detail_id = bvd.parent_id" + " start with bvd.parent_id is null "; SQLTemplate query = new SQLTemplate(BomviewDetail.class, sql, true); query.setFetchingDataRows(true); List result = context.performQuery(query); Which worked correctly for a while, but as of yesterday, we started getting ClassCastExceptions (java.math.BigDecimal) on some of the Integers that are stored in the bvd table. I'd used the #result directive before, so we changed the query to read: String sql = "select * from (" + "select " + "#result('BOMVIEW_DETAIL_ID' 'Integer'), " + "#result('BOMVIEW_ID' 'Integer'), " + "#result('MATERIAL_NUMBER' 'VARCHAR'), " + "#result('MATERIAL_DESCRIPTION' 'VARCHAR'), " + "#result('PARENT_ID' 'Integer'), " + "#result('AUTO_DRILL' 'Integer'), " + "#result('WEEKLY_GOAL' 'Integer'), " + "#result('DAILY_GOAL' 'Integer'), " + "#result('MONTHLY_GOAL' 'Integer'), " + " level" + " from bomview_detail" + " where bomview_id = " + viewId + " connect by prior bomview_detail_id = parent_id" + " start with parent_id is null) bvd" + " left join routing r on r.bomview_detail_id = bvd.bomview_detail_id" + " left join manufacturing_plant p on p.plant_id = r.plant_id"; where we still want to get the same columns but also need to specify the data types. Now, for some reason unknown to me, we only get a subset of the columns we need. As a matter of fact, the only columns that come back are those that are specified in the bvd table but not in the associated join tables. I've tried removing the 'level' attribute from the query as it is not stored in the DB but is actually a derived column from the "connect by" clause, but had no luck retrieving the columns from any of the other tables. Additionally, the #result directive already contains all the columns from the bvd table. Can you shed any light on this column issue as well as why the original code worked for so long using the correct 'Integer' datatype? There have been no changes to the underlying database or the Cayenne mapping files. If it would help to see the basic DB structure, please let me know.