Issue 409 in morphia: Need converter for java.sql.Time

33 views
Skip to first unread message

mor...@googlecode.com

unread,
May 25, 2012, 3:29:12 AM5/25/12
to morphia...@googlegroups.com
Status: New
Owner: ----
Labels: Type-Defect Priority-Low

New issue 409 by baowe...@gmail.com: Need converter for java.sql.Time
http://code.google.com/p/morphia/issues/detail?id=409

There is no converter for java.sql.Time datatype.
The Time object is not stored as mongodb date type:
{ "_id" :
ObjectId("4fbf273ce3d733a48442b1b2"), "className" : "db.mongodb.Aa", "time" :
{ "fastTime" : NumberLong("1337927484422") } }
And can't be retrieved ( see stacktrace below).

What version are you using? (Morphia/Driver/MongoDB)
0.99.1
Please include a stack trace below:
Caused by: java.lang.RuntimeException: java.lang.RuntimeException:
java.lang.RuntimeException:
com.google.code.morphia.mapping.MappingException: No usable constructor for
java.sql.Time
at com.google.code.morphia.mapping.Mapper.fromDb(Mapper.java:523)
at com.google.code.morphia.mapping.Mapper.fromDBObject(Mapper.java:272)
at
com.google.code.morphia.query.MorphiaIterator.convertItem(MorphiaIterator.java:66)
at
com.google.code.morphia.query.MorphiaIterator.processItem(MorphiaIterator.java:53)
at
com.google.code.morphia.query.MorphiaIterator.next(MorphiaIterator.java:48)
at com.google.code.morphia.query.QueryImpl.get(QueryImpl.java:368)
at com.google.code.morphia.DatastoreImpl.get(DatastoreImpl.java:532)
at
com.bytemobile.fusion.ems.db.mongodb.MongoDbAccessServiceImpl.retrieveById(MongoDbAccessServiceImpl.java:576)
... 3 more
Caused by: java.lang.RuntimeException: java.lang.RuntimeException:
com.google.code.morphia.mapping.MappingException: No usable constructor for
java.sql.Time
at
com.google.code.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:149)
at com.google.code.morphia.mapping.Mapper.readMappedField(Mapper.java:543)
at com.google.code.morphia.mapping.Mapper.fromDb(Mapper.java:520)
... 10 more
Caused by: java.lang.RuntimeException:
com.google.code.morphia.mapping.MappingException: No usable constructor for
java.sql.Time
at
com.google.code.morphia.mapping.DefaultCreator.createInst(DefaultCreator.java:123)
at
com.google.code.morphia.mapping.DefaultCreator.createInstance(DefaultCreator.java:31)
at
com.google.code.morphia.mapping.DefaultCreator.createInstance(DefaultCreator.java:41)
at
com.google.code.morphia.mapping.DefaultCreator.createInstance(DefaultCreator.java:52)
at
com.google.code.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:139)
... 12 more
Caused by: com.google.code.morphia.mapping.MappingException: No usable
constructor for java.sql.Time
at
com.google.code.morphia.mapping.DefaultCreator.getNoArgsConstructor(DefaultCreator.java:146)
at
com.google.code.morphia.mapping.DefaultCreator.createInst(DefaultCreator.java:121)
... 16 more
Caused by: java.lang.NoSuchMethodException: java.sql.Time.<init>()
at java.lang.Class.getConstructor0(Class.java:2706)
at java.lang.Class.getDeclaredConstructor(Class.java:1985)
at
com.google.code.morphia.mapping.DefaultCreator.getNoArgsConstructor(DefaultCreator.java:142)
... 17 more

mor...@googlecode.com

unread,
Jul 9, 2012, 4:42:17 PM7/9/12
to morphia...@googlegroups.com

Comment #1 on issue 409 by sebastia...@otto.de: Need converter for
java.sql.Time
http://code.google.com/p/morphia/issues/detail?id=409

You can use a custom converter for java.sql.Date. To do this simply
annotate your entity class with @Converters({MyDateConverter.class})
I wrote two Date converters for you, the first one stores the date as a
long value, the second one as a java.util.Date value. Take the one which
fits your need.

-- Date as Long

public final class DateConverter extends TypeConverter implements
SimpleValueConverter {

public DateConverter() {
super(Date.class);
}

@Override
public Object encode(Object value, MappedField optionalExtraInfo) {
return ((Date)value).getTime();
}

@Override
public Object decode(Class targetClass, Object fromDBObject,
MappedField optionalExtraInfo)
throws MappingException {
if (fromDBObject == null) {
return null;
}
return new Date((Long) fromDBObject);
}
}

-- Date as java.util.Date

public final class DateConverter extends TypeConverter implements
SimpleValueConverter {

public DateConverter() {
super(Date.class);
}

@Override
public Object encode(Object value, MappedField optionalExtraInfo) {
return new java.util.Date(((Date)value).getTime());
}

@Override
public Object decode(Class targetClass, Object fromDBObject,
MappedField optionalExtraInfo) throws MappingException {
if (fromDBObject == null) {
return null;
}
return new Date(((java.util.Date)fromDBObject).getTime());
}
}

mor...@googlecode.com

unread,
Jul 12, 2013, 9:28:25 AM7/12/13
to morphia...@googlegroups.com

Comment #2 on issue 409 by kall.pi...@gmail.com: Need converter for
java.sql.Time
http://code.google.com/p/morphia/issues/detail?id=409

Can you put the imports for those types?

--
You received this message because this project is configured to send all
issue notifications to this address.
You may adjust your notification preferences at:
https://code.google.com/hosting/settings

mor...@googlecode.com

unread,
Jul 12, 2013, 10:34:22 AM7/12/13
to morphia...@googlegroups.com

Comment #3 on issue 409 by kall.pi...@gmail.com: Need converter for
java.sql.Time
http://code.google.com/p/morphia/issues/detail?id=409

Can you put the imports for those types and give an example of how to use
@Converters?
Reply all
Reply to author
Forward
0 new messages