java - Berkeley DB 中的外键

标签 java database foreign-keys berkeley-db berkeley-db-je

我有两个实体:

第一个是:

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;
}

我希望 LexiconEntitywordId 成为 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/

相关文章:

sql-server-2005 - 如何查询不符合其约束的外键?

java - 无法使用 Tomcat9 访问本地主机

java - HashMap在迭代过程中插入

iphone - 我应该开始使用核心数据吗?

从远程数据库获取数据的 Android 应用程序

mysql - 如何从表中删除外键?

java - Joda-Time ISO8601 标准 ISOPeriodFormat 无法解析小数部分

java - 如何在javaFX中使用setOnKeyTyped

sql - PostgreSQL 每个州人口最多的 5 个县

mysql - 尝试在 MySQL 中创建一个联合表,但外键不起作用