Внешний ключ в Беркли 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

Другие вопросы по тегам