[ https://issues.apache.org/jira/browse/CAY-2006?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Savva Kolbachev updated CAY-2006: --------------------------------- Comment: was deleted (was: I've found that I didn't use SQLTemplate and #result directive correctly. If we want to use #result directive, we need to wrap each column in our SQL template to it. For my use-case {code} String sql = "SELECT #result('ID' 'int'), " + "#result('DATETIME' 'org.joda.time.DateTime'), " + "#result('DATETIME1' 'org.joda.time.DateTime') " + "FROM JODA, JODA1"; EntityResult jodaResult = new EntityResult(Joda.class); jodaResult.addDbField(Joda.ID_PK_COLUMN, "ID"); jodaResult.addObjectField(Joda.DATETIME_PROPERTY, "DATETIME"); SQLResult resultDescriptor = new SQLResult(); resultDescriptor.addEntityResult(jodaResult); resultDescriptor.addColumnResult("DATETIME1"); SQLTemplate query = new SQLTemplate(Joda.class, sql); query.setResult(resultDescriptor); {code} With aliases {code} String sql = "SELECT #result('j.ID' 'int' 'ID'), " + "#result('j.DATETIME' 'org.joda.time.DateTime' 'DATETIME'), " + "#result('DATETIME1' 'org.joda.time.DateTime') " + "FROM JODA j, JODA1"; EntityResult jodaResult = new EntityResult(Joda.class); jodaResult.addDbField(Joda.ID_PK_COLUMN, "ID"); jodaResult.addObjectField(Joda.DATETIME_PROPERTY, "DATETIME"); SQLResult resultDescriptor = new SQLResult(); resultDescriptor.addEntityResult(jodaResult); resultDescriptor.addColumnResult("DATETIME1"); SQLTemplate query = new SQLTemplate(Joda.class, sql); query.setResult(resultDescriptor); {code} In both of the examples above, I've had the same correct result {noformat} class org.example.cayenne.persistent.Joda class org.joda.time.DateTime {noformat}) > SQLTemplateAction doesn't consider javaType from #result directive > ------------------------------------------------------------------ > > Key: CAY-2006 > URL: https://issues.apache.org/jira/browse/CAY-2006 > Project: Cayenne > Issue Type: Bug > Affects Versions: 4.0.M3 > Reporter: Savva Kolbachev > Assignee: Savva Kolbachev > Fix For: 4.0.M3 > > > SQLTemplateAction doesn't consider javaType from #result directive when > configurating RowDescriptorBuilder. It put to > RowDescriptorBuilder.typeOverrides only types from current ObjEntity and > DbEntity. > So the following example doesn't work correctly. > I added Joda DateTimeType provided by John Huss in > [CAY-1626|https://issues.apache.org/jira/browse/CAY-1626] to the ExtendedType. > Than I created two DbEntities with fields of TIMESTAMP type and one dependent > ObjEntity. > {code:xml|tittle=datamap} > <db-entity name="JODA"> > <db-attribute name="DATETIME" type="TIMESTAMP"/> > <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" > isMandatory="true"/> > </db-entity> > <db-entity name="JODA1"> > <db-attribute name="DATETIME1" type="TIMESTAMP"/> > </db-entity> > <obj-entity name="Joda" className="org.example.cayenne.persistent.Joda" > dbEntityName="JODA"> > <obj-attribute name="datetime" type="org.joda.time.DateTime" > db-attribute-path="DATETIME"/> > </obj-entity> > {code} > And I got java.util.Date instead of org.joda.time.DateTime for column > DATETIME1 AS D by the code below. > {code} > String sql = "SELECT j.ID, " > + "#result('j.DATETIME' 'org.joda.time.DateTime' '' > 'JODA.DATETIME'), " > + "#result('DATETIME1' 'org.joda.time.DateTime' '' > 'JODA1.DATETIME1') AS D " > + "FROM JODA j, JODA1"; > EntityResult jodaResult = new EntityResult(Joda.class); > jodaResult.addDbField(Joda.ID_PK_COLUMN, "ID"); > jodaResult.addObjectField(Joda.DATETIME_PROPERTY, "DATETIME"); > SQLResult resultDescriptor = new SQLResult(); > resultDescriptor.addEntityResult(jodaResult); > resultDescriptor.addColumnResult("D"); > SQLTemplate query = new SQLTemplate(Joda.class, sql); > query.setResult(resultDescriptor); > List<Object[]> dataList = context.performQuery(query); > for (Object[] data : dataList) { > System.out.println(data[0].getClass()); > System.out.println(data[1].getClass()); > } > {code} > {noformat} > class org.example.cayenne.persistent.Joda > class java.util.Date > {noformat} -- This message was sent by Atlassian JIRA (v6.3.4#6332)