First off, I'm fairly new to jOOQ - and I have to say that I'm really impressed with what I'm finding. Great stuff!
I am using version 3.5.1 on Java 7.
I have several fields in a Postgres db that are timestamps. I use Joda in the business code, so part of bringing jOOQ into this project was adding a converter like in the docs:
public class JooqJodaDateTimeConvertor implements Converter<Timestamp, DateTime> {
@Override
public DateTime from(Timestamp databaseObject) {
if (databaseObject == null) {
return null;
}
return new DateTime(databaseObject.getTime());
}
@Override
public Timestamp to(DateTime dt) {
if (dt == null) {
return null;
}
return new Timestamp(dt.getMillis());
}
@Override
public Class<Timestamp> fromType() {
return Timestamp.class;
}
@Override
public Class<DateTime> toType() {
return DateTime.class;
}
}
This appears to work perfectly for record objects - I can pull records from the database and get the contents of those fields without any issue - types are correct, etc.
The issue appears when I try to fetch into a generated pojo. The types on the pojo appear fine. For example:
private org.joda.time.DateTime createdAt;
[...]
@javax.validation.constraints.NotNull
public org.joda.time.DateTime getCreatedAt() {
return this.createdAt;
}
public void setCreatedAt(org.joda.time.DateTime createdAt) {
this.createdAt = createdAt;
}
But when I execute the following (I'm getting the field name from the user, in truth - which is why I'm putting in a String here, by the way):
create.fetchOne(t, t.field("id").equal(id)).into(Test.class)
I get the following exception:
org.jooq.exception.MappingException: An error ocurred when mapping record to class com.fluidapps.model.bootstrap.tables.pojos.Instance
at org.jboss.resteasy.core.ExceptionHandler.handleApplicationException(ExceptionHandler.java:76) [resteasy-jaxrs-3.0.8.Final.ja
r:]
at org.jboss.resteasy.core.ExceptionHandler.handleException(ExceptionHandler.java:212) [resteasy-jaxrs-3.0.8.Final.jar:]
at org.jboss.resteasy.core.SynchronousDispatcher.writeException(SynchronousDispatcher.java:149) [resteasy-jaxrs-3.0.8.Final.jar
:]
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:372) [resteasy-jaxrs-3.0.8.Final.jar:]
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:179) [resteasy-jaxrs-3.0.8.Final.jar:]
[more jboss references removed . . . ]
Caused by: javax.ejb.EJBException: org.jooq.exception.MappingException: An error ocurred when mapping record to class com.fluidapps.model.bootstrap.tables.pojos.Instance
at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:190) [wildfly-ejb3-8.1.0.Final.jar:8.1.0.
Final]
at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:275) [wildfly-ejb3-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.ejb3.tx.CMTTxInterceptor.requiresNew(CMTTxInterceptor.java:369) [wildfly-ejb3-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:241) [wildfly-ejb3-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
[more jboss references removed . . . ]
Caused by: org.jooq.exception.MappingException: An error ocurred when mapping record to class com.fluidapps.model.bootstrap.tables.pojos.Instance
at org.jooq.impl.DefaultRecordMapper$MutablePOJOMapper.map(DefaultRecordMapper.java:493) [jooq-3.5.1.jar:]
at org.jooq.impl.DefaultRecordMapper.map(DefaultRecordMapper.java:331) [jooq-3.5.1.jar:]
at org.jooq.impl.AbstractRecord.into(AbstractRecord.java:669) [jooq-3.5.1.jar:]
at com.fluidapps.enterprise.services.EntityService.findAndFillJooqEntity(EntityService.java:1133) [FluidAppsManager-model.jar:]
at com.fluidapps.enterprise.services.EntityService.findAndFillJooqEntity(EntityService.java:1089) [FluidAppsManager-model.jar:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_10]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_10]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_10]
at java.lang.reflect.Method.invoke(Method.java:601) [rt.jar:1.7.0_10]
at org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53)
at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
[more jboss references removed . . . ]
Caused by: org.jooq.exception.DataTypeException: Cannot convert from 2013-09-20T16:50:47.820Z (class org.joda.time.DateTime) to class java.util.Date
at org.jooq.tools.Convert$ConvertAll.fail(Convert.java:873) [jooq-3.5.1.jar:]
at org.jooq.tools.Convert$ConvertAll.from(Convert.java:811) [jooq-3.5.1.jar:]
at org.jooq.tools.Convert.convert0(Convert.java:300) [jooq-3.5.1.jar:]
at org.jooq.tools.Convert.convert(Convert.java:292) [jooq-3.5.1.jar:]
at org.jooq.tools.Convert.convert(Convert.java:360) [jooq-3.5.1.jar:]
at org.jooq.impl.AbstractRecord.getValue(AbstractRecord.java:253) [jooq-3.5.1.jar:]
at org.jooq.impl.DefaultRecordMapper$MutablePOJOMapper.map(DefaultRecordMapper.java:486) [jooq-3.5.1.jar:]
... 114 more
All the caused-bys are due to layers it bubbles up through, of course - I would expect that the important parts should be the last 2.
I have searched the jOOQ site, Googled for anything that might solve this, searched StackOverflow and this user group to no avail.
I have probably just missed something in my setup of the generator or something. Please, can anybody help me work through this?