Внешний ключ в Беркли DB
У меня есть две сущности:
Первый из них:
public class WordEntity {
@PrimaryKey
private String content;
private int wordId;
}
Второй:
public class LexiconEntity {
@SecondaryKey(relate = Relationship.ONE_TO_ONE, relatedEntity = WordEntity.class)// it does not work
private int wordId;
private int numDocs;
}
я бы хотел wordId
из LexiconEntity
быть внешним ключом того из WordEntity
, Как я могу это сделать?
1 ответ
Поздний ответ, но... Во-первых, похоже, что wordId будет более естественным PK для WordEntity. LexiconEntity также должен определять PrimaryKey. WordEntity должен определять SecondaryKey, который ссылается на LexiconEntity или "Указывает сущность, к которой относится эта сущность".
public class WordEntity {
@PrimaryKey
private int wordId;
private String content;
@SecondaryKey(relate = Relationship.ONE_TO_ONE, relatedEntity = LexiconEntity.class)
private int lexId;
}
public class LexiconEntity {
@PrimaryKey
private int lexId;
private int numDocs;
}
Поэтому данные будут:
LexiconEntity: lexId ----- 100 101 102 WordEntity: wordId lexId ------ ----- 1 100 2 101 3 102
Поскольку это отношение one_to_one, вторичный ключ является уникальным для объекта, его определяющего. Так что в этом случае lexId уникален в WordEntity, поэтому вы не можете иметь:
WordEntity: wordId lexId ------ ----- 1 100 2 101 3 100 - Исключение при вставке, поскольку оно является дублирующим
См. http://docs.oracle.com/cd/E17277_02/html/GettingStartedGuide/dplindexcreate.html http://docs.oracle.com/cd/E17277_02/html/java/com/sleepycat/persist/model/SecondaryKey.html