Je suis sur Android la Chambre de la Persistance de la Bibliothèque à partir de l'Android Composants de l'Architecture a récemment annoncé à la Google I/O. les Choses semblent être au travail, mais j'obtiens l'erreur suivante:
Avertissement:tagId les références de colonne de clé étrangère, mais il ne fait pas partie d'un index. Cela peut déclencher des analyses de tables complètes à chaque fois que la table parent est modifié de sorte que vous êtes fortement conseillé de créer un index qui couvre ce la colonne.
Ma base de données dispose de 3 tables: Note
, Tag
, et JoinNotesTags
. Notes de Tags est un plusieurs-à-plusieurs relations, d'où le JoinNotesTags tableau pour gérer la cartographie. Les tables sont simples:
-
Note.id
etTag.id
sont à la fois des clés primaires -
JoinNotesTags.noteId
référencesNote.id
-
JoinNotesTags.tagId
référencesTag.id
Les contraintes de clé étrangère sont définis sur l' JoinNotesTags
table. Pour référence, voici l' CREATE TABLE
déclaration pour l' JoinNotesTags
tableau:
"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
)"
Et voici la correspondante @Entity
d'annotation pour la classe:
@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"))
)
)
Comme vous pouvez le voir à partir de la @Entity
d'annotation, tagId
est inclus dans un composite index unique avec noteId
. J'ai confirmé que cet indice est correctement défini dans l'auto-générés json fichier de schéma ainsi:
"CREATE UNIQUE INDEX `index_JoinNotesTags_noteId_tagId`
ON `JoinNotesTags` (`noteId`, `tagId`)"
Donc, ma question: Est-ce l'avertissement juste un bug dans l' (encore en version alpha) Salle de la Bibliothèque -- c'est à dire le moment de la compilation de l'analyse est de manquer le fait qu' tagId
fait partie de cet indice composite? Ou dois-je vraiment une indexation problème que je dois résoudre, afin d'éviter des analyses de tables complètes?