Я пытаюсь вернуть объект JodaTime DateTime. Это работает для поля Effective_date ниже. Но я не уверен, как заставить его возвращать DateTime для объекта Event. Любые идеи?
String sql = "SELECT a.availability_id, a.event_id, a.availability_set_id, "
+ "e.event_id, "
+ "#result('e.start' 'org.joda.time.DateTime' '' 'event.start'), "
+ "#result('e.end' 'org.joda.time.DateTime' '' 'event.end'), "
+ "e.recurrence_id, "
+ "e.sequence, "
+ "e.uid, "
+ "#result('effective_date' 'org.joda.time.DateTime' '' 'effective_date'), "
+ "#result('next_effective_date' 'org.joda.time.DateTime' '' 'next_effective_date') "
<snip>
EntityResult eventResult = new EntityResult(Event.class);
eventResult.addDbField(Event.EVENT_ID_PK_COLUMN, "event_id");
eventResult.addObjectField(Event.START_PROPERTY, "start");
eventResult.addObjectField(Event.END_PROPERTY, "end")
<snip>
SQLResult resultDescriptor = new SQLResult();
resultDescriptor.addEntityResult(availabilityResult);
resultDescriptor.addEntityResult(eventResult);
<snip>
List<Object[]> dataList = context.performQuery(query);
for (Object[] data : dataList) {
Event event = (Event) data[1];
event.getStart(); // Runs into class cast error where it's returning Date instead of DateTime
}
РЕДАКТИРОВАТЬ:
Я уже добавил Joda DateTime в ExtendedType. Вышеупомянутая проблема возникает только тогда, когда я использую SQLResult для создания объекта Event.
// create custom ExtendedType instance
ExtendedType dateTimeType = new DateTimeType();
DataNode node = domain.getNode("MySQLNode");
// install ExtendedType
node.getAdapter().getExtendedTypes().registerType(dateTimeType);
Он хорошо работает, когда не используется SQLResult для создания экземпляра объекта Event. Здесь Cayenne Modeler сгенерировал класс _Event с возвращаемым типом DateTime.
public abstract class _Event extends CayenneDataObject {
<snip>
public void setStart(DateTime start) {
writeProperty("start", start);
}
public DateTime getStart() {
return (DateTime)readProperty("start");
}