Couchbase lite - получение свойств документа после повторного открытия базы данных дает другой результат

Получение свойств документа после повторного открытия базы данных дает другой результат. В качестве примера см. один и тот же документ, напечатанный трижды ниже.

Ключевые фрагменты кода (полный код доступен здесь) - вы можете сначала увидеть основной метод:

class QuoteInfoDb(language: Language) {
  val log = LoggerFactory.getLogger(getClass.getName)
  var quoteDb: Database = null
  var annotationDb: Database = null
  var dbManager: Manager = null
  def openDatabases() = {
    dbManager =  new Manager(new JavaContext("data") {
      override def getRootDirectory: File = {
        val rootDirectoryPath = "/home/vvasuki/subhAShita-db-sanskrit"
        new File(rootDirectoryPath)
      }
    }, Manager.DEFAULT_OPTIONS)
    dbManager.setStorageType("ForestDB")
    quoteDb = dbManager.getDatabase(s"quote_db__${language.code}")
    annotationDb = dbManager.getDatabase(s"annotation_db__${language.code}")
  }

  def closeDatabases = {
    quoteDb.close()
    annotationDb.close()
  }


  def updateDocument(document: Document, jsonMap: Map[String,Object]) = {
    document.update(new Document.DocumentUpdater() {
      override def update(newRevision: UnsavedRevision): Boolean = {
        val properties = newRevision.getUserProperties
        properties.putAll(jsonMap.asJava)
        newRevision.setUserProperties(properties)
        true
      }
    })
  }
  def testQuoteWrite() = {
    val jsonMap =Map("scriptRenderings"-> List(Map("text"-> "दण्डः शास्ति प्रजाः सर्वाः दण्ड एवाभिरक्षति। दण्डः सुप्तेषु जागर्ति दण्डं धर्मं विदुर्बुधाः।।", "scheme" -> "dev", "startLetter" -> "द")),
      "jsonClass"->"QuoteText",
      "language"->Map("code" -> "sa"),
      "key"->"damDaHshaastiprajaaHsarvaaHdamDaevaabhiraxatidamDaHsupteShujaagartidamDamdharmamvidurbudhaaH"
    )
    val document = quoteDb.getDocument(jsonMap("key").toString)
    updateDocument(document, jsonMap)
  }

  def testQuoteRetrieval() = {
    val id = "damDaHshaastiprajaaHsarvaaHdamDaevaabhiraxatidamDaHsupteShujaagartidamDamdharmamvidurbudhaaH"
    val doc = quoteDb.getDocument(id)
    val jsonMap = doc.getUserProperties
    log debug jsonMap.toString
  }
}

object dbMakerSanskrit {
  val log = LoggerFactory.getLogger(getClass.getName)
  val quoteInfoDb = new QuoteInfoDb(language = Language("sa"))

  def main(args: Array[String]): Unit = {
    quoteInfoDb.openDatabases()
    quoteInfoDb.testQuoteWrite()
    quoteInfoDb.testQuoteRetrieval()
    quoteInfoDb.closeDatabases
    quoteInfoDb.openDatabases()
    quoteInfoDb.testQuoteRetrieval()
    quoteInfoDb.testQuoteRetrieval()
    // quoteInfoDb.checkConflicts
//    quoteInfoDb.exportToTsv
//    log info s"Updated records ${vishvasaPriyaSamskritaPadyani.take(1).map(quoteInfoDb.addQuoteWithInfo(_)).sum} from vishvasaPriyaSamskritaPadyani"
  }
}

дает следующий результат:

22:29:25 subhAShitaDb.QuoteInfoDb 130 --- {metre={defined=false, empty=true}, scriptRenderings=List(Map(text -> दण्डः शास्ति प्रजाः सर्वाः दण्ड एवाभिरक्षति। दण्डः सुप्तेषु जागर्ति दण्डं धर्मं विदुर्बुधाः।।, scheme -> dev, startLetter -> द)), jsonClass=QuoteText, language=Map(code -> sa), key=damDaHshaastiprajaaHsarvaaHdamDaevaabhiraxatidamDaHsupteShujaagartidamDamdharmamvidurbudhaaH}
22:29:25 subhAShitaDb.QuoteInfoDb 130 --- {metre={defined=false, empty=true}, scriptRenderings={empty=false, traversableAgain=true}, jsonClass=QuoteText, language={traversableAgain=true, empty=false}, key=damDaHshaastiprajaaHsarvaaHdamDaevaabhiraxatidamDaHsupteShujaagartidamDamdharmamvidurbudhaaH}
22:29:25 subhAShitaDb.QuoteInfoDb 130 --- {metre={defined=false, empty=true}, scriptRenderings={empty=false, traversableAgain=true}, jsonClass=QuoteText, language={traversableAgain=true, empty=false}, key=damDaHshaastiprajaaHsarvaaHdamDaevaabhiraxatidamDaHsupteShujaagartidamDamdharmamvidurbudhaaH}

Как сделать так, чтобы я каждый раз получал результат, похожий на первый?


person vishvAs vAsuki    schedule 10.04.2017    source источник


Ответы (1)


Мне помогли здесь. Мне удалось исправить код, рекурсивно преобразовав карту scala в карту java (используя этот совет) при записи в базу данных.

person vishvAs vAsuki    schedule 14.04.2017