2017-04-10 3 views
0

Das Abrufen von Dokumenteigenschaften nach dem erneuten Öffnen der Datenbank führt zu einem anderen Ergebnis. Ein Beispiel finden Sie in demselben Dokument, das im Folgenden dreimal gedruckt wird.couchbase lite - Abrufen von Dokumenteigenschaften nach dem erneuten Öffnen der Datenbank führt zu einem anderen Ergebnis

Key Code-Teile (vollständiger Code verfügbar here) - Sie können gerne die wichtigste Methode, um zu sehen zuerst:

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" 
    } 
} 

ergibt die folgende Ausgabe:

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} 

Wie, um sicherzustellen, dass ich ein Ergebnis ähnlich dem ersten jedes Mal?

Antwort

0

mir wurde geholfen here. Ich war in der Lage, den Code von rekursiv zu beheben, die Scala-Map in eine Java-Map (mit dieser tip) beim Schreiben in die Datenbank zu konvertieren.

Verwandte Themen