我有两个实体:
第一个是:
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;
}
我希望 LexiconEntity
的 wordId
成为 WordEntity
的外键。我怎样才能做到这一点?
最佳答案
迟到的答案,但是...首先看起来 wordId 对于 WordEntity 来说是一个更自然的 PK。 LexiconEntity 还应该定义一个 PrimaryKey。 WordEntity 应定义引用 LexiconEntity 的 secondaryKey 或“指定与该实体相关的实体”。
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 -- Exception on insert since it is a dup
参见http://docs.oracle.com/cd/E17277_02/html/GettingStartedGuide/dplindexcreate.html#dplsecondaryidxdecl http://docs.oracle.com/cd/E17277_02/html/java/com/sleepycat/persist/model/SecondaryKey.html#relatedEntity()
关于java - Berkeley DB 中的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23073115/