如何在 mongodb 中保存 java.sql.date 對象? (How to save java.sql.date object in mongodb?)


問題描述

如何在 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 usmanMarcelHodan)

參考文件

  1. How to save java.sql.date object in mongodb? (CC BY‑SA 2.5/3.0/4.0)

#spring-data-mongodb #java #mongoDB #spring






相關問題

如何在 mongodb 中保存 java.sql.date 對象? (How to save java.sql.date object in mongodb?)

Spring Data MongoDB Core 1.9.1.RELEASE 給出 java.lang.NoClassDefFoundError: org/springframework/data/geo/GeoResults (Spring Data MongoDB Core 1.9.1.RELEASE gives java.lang.NoClassDefFoundError: org/springframework/data/geo/GeoResults)

我可以結合 AND 和 OR 條件嗎 (Can I combine AND and OR conditions)

查詢數據時應該使用 MongoTemplate 還是 DBCollection (Should i use MongoTemplate or DBCollection when query data)

是否有可能使用 Spring Data MongoDb 來定義自定義標準? (Is possibility using Spring Data MongoDb to define custom Criteria?)

Spring-data 2.1 使用 kotlin 獲取“UnsupportedOperationException:沒有訪問器設置屬性” (Spring-data 2.1 get "UnsupportedOperationException: No accessor to set property" with kotlin)

調用頁面大小大於 36 的 Spring Data MongoDB 存儲庫方法時出現 StackOverflowError (StackOverflowError when calling Spring Data MongoDB repository method with a page size bigger than 36)

JSON- MongoDB 中帶有 Spring Data 的數組 (JSON- Array in MongoDB with Spring Data)

Spring Data Mongo DB:回复消息長度5502322小於最大消息長度 (Spring Data Mongo DB: The reply message length 5502322 is less than the maximum message length)

Spring Boot 反應式和 mongodb '命令插入需要身份驗證' (Spring boot reactive and mongodb 'command insert requires authentication')

使用 MongoDB Spring Data Aggregation 匹配日期時間字段的問題 (Problem with matching date-time fields using MongoDB Spring Data Aggregation)

在 Spring Boot 應用程序中實現工作進程 (Implementing worker processes in a Spring Boot application)







留言討論