【问题标题】:Avoiding nullable foreign keys in many-to-many table避免多对多表中可为空的外键
【发布时间】:2014-04-03 07:48:40
【问题描述】:

我有一个看起来有点像这样的多对多表。 它通过 ormlite 访问并存储在嵌入式 h2 数据库中。

@DatabaseField(id = true)
private String id;

@DatabaseField(foreign = true, canBeNull = false, uniqueCombo = true, foreignAutoRefresh = true)
private ForeignOne foreignOne;

@DatabaseField(foreign = true, canBeNull = false, uniqueCombo = true, foreignAutoRefresh = true)
private ForeignTwo foreignTwo;

如果我尝试存储其中一个或两个外部成员为 null 的实例,DAO 对象将按注释状态抛出异常 canBeNull = false .

但是,如果将一个或两个外部成员设置为数据库中不存在的实例,我可以执行插入到数据库中,并且下次我从数据库插入时不存在的那些外部成员是null

有什么办法可以避免吗?

谢谢

【问题讨论】:

    标签: sql database orm h2 ormlite


    【解决方案1】:

    not null 约束仅仅意味着该字段不能为空,并不意味着它必须是有效的键。如果你想确保你的外键确实指向外表中的一行,你需要创建一个foreign key constraint,这在ORMLite中是不完全支持的。相反,您必须使用custom column definition,例如

    @DatabaseField(foreign = true,
                   columnDefinition = "integer references foreignOne(id)" )
    private ForeignOne foreignOne;
    

    让 ORMLite 创建一个。或者您可以自己创建 h2 数据库并包含一个。

    【讨论】:

      猜你喜欢
      • 2019-04-16
      • 2016-07-08
      • 2016-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多