問題描述
如何在 mongodb 中保存 java.sql.date 對象? (How to save java.sql.date object in mongodb?)
我正在嘗試從 MYSQL 獲取數據,並在處理後使用 java 應用程序將其保存在 MongoDB 中。我的 POJO 包含 java.util.date 對象來存儲日期字段。當我從 MYSQL 獲取時,它返回 java.sql.date 對象。因此我的 pojo 將在 util date 對像中引用 sql date。
使用 spring data mongodb 我在 mongodb 中保存了相同的 pojo。它引發以下異常:
Exception in thread "main" org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class java.sql.Date.
at org.bson.codecs.configuration.CodecCache.getOrThrow(CodecCache.java:46)
at org.bson.codecs.configuration.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:63)
at org.bson.codecs.configuration.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:37)
at com.mongodb.DBObjectCodec.writeValue(DBObjectCodec.java:210)
at com.mongodb.DBObjectCodec.encodeMap(DBObjectCodec.java:220)
at com.mongodb.DBObjectCodec.writeValue(DBObjectCodec.java:196)
at com.mongodb.DBObjectCodec.encodeIterable(DBObjectCodec.java:269)
at com.mongodb.DBObjectCodec.writeValue(DBObjectCodec.java:198)
at com.mongodb.DBObjectCodec.encode(DBObjectCodec.java:128)
at com.mongodb.DBObjectCodec.encode(DBObjectCodec.java:61)
at com.mongodb.CompoundDBObjectCodec.encode(CompoundDBObjectCodec.java:48)
at com.mongodb.CompoundDBObjectCodec.encode(CompoundDBObjectCodec.java:27)
at org.bson.codecs.BsonDocumentWrapperCodec.encode(BsonDocumentWrapperCodec.java:63)
at org.bson.codecs.BsonDocumentWrapperCodec.encode(BsonDocumentWrapperCodec.java:29)
at com.mongodb.connection.UpdateCommandMessage.writeTheWrites(UpdateCommandMessage.java:85)
at com.mongodb.connection.UpdateCommandMessage.writeTheWrites(UpdateCommandMessage.java:42)
at com.mongodb.connection.BaseWriteCommandMessage.encodeMessageBodyWithMetadata(BaseWriteCommandMessage.java:118)
at com.mongodb.connection.RequestMessage.encodeWithMetadata(RequestMessage.java:160)
at com.mongodb.connection.WriteCommandProtocol.sendMessage(WriteCommandProtocol.java:199)
at com.mongodb.connection.WriteCommandProtocol.execute(WriteCommandProtocol.java:88)
at com.mongodb.connection.UpdateCommandProtocol.execute(UpdateCommandProtocol.java:63)
at com.mongodb.connection.UpdateCommandProtocol.execute(UpdateCommandProtocol.java:37)
at com.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:159)
at com.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:260)
at com.mongodb.connection.DefaultServerConnection.updateCommand(DefaultServerConnection.java:121)
at com.mongodb.operation.UpdateOperation.executeCommandProtocol(UpdateOperation.java:76)
at com.mongodb.operation.BaseWriteOperation$1.call(BaseWriteOperation.java:111)
at com.mongodb.operation.BaseWriteOperation$1.call(BaseWriteOperation.java:106)
at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:187)
at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:178)
at com.mongodb.operation.BaseWriteOperation.execute(BaseWriteOperation.java:106)
at com.mongodb.operation.BaseWriteOperation.execute(BaseWriteOperation.java:58)
at com.mongodb.Mongo.execute(Mongo.java:769)
at com.mongodb.Mongo$2.execute(Mongo.java:752)
at com.mongodb.DBCollection.executeWriteOperation(DBCollection.java:330)
at com.mongodb.DBCollection.replaceOrInsert(DBCollection.java:408)
at com.mongodb.DBCollection.save(DBCollection.java:397)
at com.mongodb.DBCollection.save(DBCollection.java:370)
at org.springframework.data.mongodb.core.MongoTemplate$11.doInCollection(MongoTemplate.java:1040)
at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:462)
at org.springframework.data.mongodb.core.MongoTemplate.saveDBObject(MongoTemplate.java:1035)
at org.springframework.data.mongodb.core.MongoTemplate.doSave(MongoTemplate.java:975)
at org.springframework.data.mongodb.core.MongoTemplate.save(MongoTemplate.java:921)
at com.persivia.ptf.mongo.dao.impl.MongoDaoImpl.save(MongoDaoImpl.java:47)
現在我如何在不更改我的 dao 類的情況下將其保存在 mongodb 中。
參考解法
方法 1:
Try to use java.util.Date
to recover your time from MongoDb. I think I remember a similar issue and solved it this way.
(by usman、MarcelHodan)