مشكلة مع Berkeley DB JE BASE API قواعد البيانات والتسلسلات الثانوية
-
21-09-2019 - |
سؤال
لدي وثيقة صفية تتكون من Id (int)
و Url (String)
. أود الحصول على فهرس أساسي على Id
وفهرس ثانوي على Url
. أود أيضًا أن يكون لدي تسلسل للتخليص التلقائي للمعرف. لذلك أقوم بإنشاء SecondaryDatabase ثم أقوم بإنشاء تسلسل. أثناء تهيئة التسلسل ، أحصل على استثناء:
Exception in thread "main" java.lang.IllegalArgumentException
at com.sleepycat.util.UtfOps.getCharLength(UtfOps.java:137)
at com.sleepycat.util.UtfOps.bytesToString(UtfOps.java:259)
at com.sleepycat.bind.tuple.TupleInput.readString(TupleInput.java:152)
at pl.edu.mimuw.zbd.berkeley.zadanie.rozwiazanie.MyDocumentBiding.entryToObject(MyDocumentBiding.java:12)
at pl.edu.mimuw.zbd.berkeley.zadanie.rozwiazanie.MyDocumentBiding.entryToObject(MyDocumentBiding.java:1)
at com.sleepycat.bind.tuple.TupleBinding.entryToObject(TupleBinding.java:76)
at pl.edu.mimuw.zbd.berkeley.zadanie.rozwiazanie.UrlKeyCreator.createSecondaryKey(UrlKeyCreator.java:20)
at com.sleepycat.je.SecondaryDatabase.updateSecondary(SecondaryDatabase.java:835)
at com.sleepycat.je.SecondaryTrigger.databaseUpdated(SecondaryTrigger.java:42)
at com.sleepycat.je.Database.notifyTriggers(Database.java:2004)
at com.sleepycat.je.Cursor.putNotify(Cursor.java:1692)
at com.sleepycat.je.Cursor.putInternal(Cursor.java:1616)
at com.sleepycat.je.Cursor.putNoOverwrite(Cursor.java:663)
at com.sleepycat.je.Sequence.<init>(Sequence.java:188)
at com.sleepycat.je.Database.openSequence(Database.java:546)
at pl.edu.mimuw.zbd.berkeley.zadanie.rozwiazanie.MyFullTextSearchEngine.init(MyFullTextSearchEngine.java:131)
at pl.edu.mimuw.zbd.berkeley.zadanie.testy.MyFullTextSearchEngineTest.main(MyFullTextSearchEngineTest.java:18)
يبدو أنه أثناء تهيئة التسلسل ، يتم إجبار قاعدة البيانات الثانوية على التحديث. عندما أقوم بتصحيح طريقة enterObject من myDocumentbiding البايتات التي تحاول تحويلها إلى كائن تبدو عشوائية.
ما الخطأ الذي افعله؟
المحلول
لقد اكتشفت أن الحل هو إما إنشاء DB منفصل للتسلسل أو لجعل thelyKeyCreator يكتشف عند إضافة بيانات تسلسل وإرجاع خطأ في مثل هذا الموقف.
لا تنتمي إلى StackOverflow