【问题标题】:ORMlite Android foreign key supportORMlite Android 外键支持
【发布时间】:2012-01-25 12:13:19
【问题描述】:

我在 ORMlite 文档中并不聪明。是否可以在类中声明这个参数是外键?

例如我有表客户:

@DatabaseTable(tableName = "customer")
public class Customer {
    @DatabaseField(id = true)
    private String customerName;

    @DatabaseField
    private String customerSurname;

    @DatabaseField(foreign = true)
    private String accountNameHolder;

    @DatabaseField
    private int age;

    public Customer() {
    }
}

AccountNameHolder 应针对表 Accounts 中的 DatabaseField 名称。怎么做?我只找到了参数foreign = true,但没有任何关于它代表哪个参数和来自哪个表的信息。

谢谢

【问题讨论】:

标签: android foreign-keys ormlite


【解决方案1】:

AccountNameHolder 应针对表 Accounts 中的 DatabaseField 名称。该怎么做?

我不确定你想要什么,但可能你应该将你的外部字段更改为实际的 type 而不是名称:

@DatabaseField(foreign = true)
private Account account;

在内部,ORMLite 将在Customer 表中存储一个account_id 字段(可能是字符串名称),但您不必担心这一点。请记住,当您查询Customer 时,在account 字段上设置的Account 将只设置id 字段。要让 ORMLite 也查找您需要设置 foreignAutoRefresh=true 的帐户。

正如@Lalit 所指出的,这里有一些关于这个主题的文档。我们在文档上花了很长时间,所以它应该会有所帮助。

还有一些example code about foreign fields

希望这会有所帮助。

【讨论】:

  • 如果它不是它的 PK(即在示例中 - 如果它不是 account.id),我如何定义用于查找的外部列名称?我正在寻找类似 foreignColumnName 注释的东西,但不存在。原因是我正在使用具有已定义的固定列名和 FK 的现有数据库(不是由 ORMLite 创建的)。一个约束是 varchar 列的一对一约束,尽管它是唯一的,但它不是另一个表的 PK。
  • foreignColumnName 已添加到 @MathiasLin 2012 年 4 月发布的 4.39 版中的 DatabaseField 注释中。
  • @Gray 在查看来自“ndroidCompiledStatement”标签的日志时,我看到 ORMLite 为注释为主键的字段创建主键语句(整数主键自动增量),但它没有为字段创建任何语句注释为外键 (FOREIGN KEY (X_Id) REFERENCES Persons(Y_Id))。你能解释一下为什么它不为外键执行吗?
  • 只是还没到那里@Piotr。不知道如何回答否则。随时提交补丁。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多