मैं एंड्रॉइड आर्किटेक्चर घटक से एंड्रॉइड की रूम पर्सिस्टेंस लाइब्रेरी का उपयोग कर रहा हूं हाल ही में Google I/O पर घोषित किया गया। चीजें काम करने लगते हैं, लेकिन मैं निम्नलिखित त्रुटि हो रही है: Note
, Tag
, और JoinNotesTags
:विदेशी कक्ष में कॉलम के बारे में एंड्रॉइड रूम संकलन-समय चेतावनी एक सूचकांक का हिस्सा नहीं है। इसका क्या मतलब है?
Warning:tagId column references a foreign key but it is not part of an index. This may trigger full table scans whenever parent table is modified so you are highly advised to create an index that covers this column.
मेरे डेटाबेस 3 टेबल है। टैग्स के लिए नोट्स मैपिंग को संभालने के लिए कई से अधिक रिश्ते हैं, इसलिए JoinNotesTags तालिका। टेबल स्पष्ट हैं:
Note.id
औरTag.id
दोनों प्राथमिक कुंजीJoinNotesTags.noteId
संदर्भNote.id
JoinNotesTags.tagId
संदर्भTag.id
विदेशी कुंजी की कमी JoinNotesTags
मेज पर परिभाषित कर रहे हैं कर रहे हैं।
"CREATE TABLE IF NOT EXISTS `JoinNotesTags` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`noteId` INTEGER,
`tagId` INTEGER,
FOREIGN KEY(`noteId`) REFERENCES `Note`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE ,
FOREIGN KEY(`tagId`) REFERENCES `Tag`(`id`) ON UPDATE NO ACTION ON DELETE NO ACTION
)"
यहाँ और उस वर्ग के लिए इसी @Entity
एनोटेशन है: संदर्भ के लिए, JoinNotesTags
तालिका के लिए CREATE TABLE
बयान है
@Entity(
indices = arrayOf(Index(value = *arrayOf("noteId", "tagId"), unique = true)),
foreignKeys = arrayOf(
ForeignKey(
entity = Note::class,
parentColumns = arrayOf("id"),
childColumns = arrayOf("noteId"),
onDelete = ForeignKey.CASCADE),
ForeignKey(
entity = Tag::class,
parentColumns = arrayOf("id"),
childColumns = arrayOf("tagId"))
)
)
आप @Entity
टिप्पणी से देख सकते हैं, tagId
हैnoteId
के साथ एक समग्र अद्वितीय अनुक्रमणिका में शामिल है। मैंने पुष्टि की है कि इस सूचकांक को सही ढंग से और साथ ही स्वत: जनरेट json स्कीमा फ़ाइल में परिभाषित किया गया है:
"CREATE UNIQUE INDEX `index_JoinNotesTags_noteId_tagId`
ON `JoinNotesTags` (`noteId`, `tagId`)"
तो, मेरे सवाल: इस चेतावनी (अभी भी अल्फा जारी) में सिर्फ एक बग कक्ष पुस्तकालय है - यानी संकलन-समय विश्लेषण इस तथ्य को याद कर रहा है कि tagId
इस समग्र अनुक्रमणिका का हिस्सा है? या क्या मेरे पास वास्तव में एक अनुक्रमण समस्या है जिसे मुझे पूर्ण तालिका स्कैन से बचने के लिए हल करने की आवश्यकता है?
हमें आपकी _table_ परिभाषाएं, आपके जावा कोड को नहीं देखना चाहिए। विशेष रूप से, मेरा मानना है कि त्रुटि यह नहीं है कि 'tagId' कॉलम में कोई अनुक्रमणिका नहीं है, लेकिन यह एक विदेशी कुंजी को संदर्भित करता है जो अनुक्रमित नहीं है। –
@TimBiegeleisen, प्रश्न 'JoinNotesTags' के लिए तालिका परिभाषा को शामिल करने के लिए अपडेट किया गया। लेकिन रिकॉर्ड के लिए, 'टैग.आईडी' एक प्राथमिक कुंजी है। इसके अलावा, चेतावनी का कहना है कि यह मुद्दा 'tagId' कॉलम के साथ है - मूल तालिका में कॉलम नहीं जो संदर्भित करता है (' टैग.आईडी')। – mikejonesguy