Sql 避免多对多表中的可空外键
我有一张多对多的桌子,看起来有点像这样。 它通过ormlite访问并存储在嵌入式h2数据库中Sql 避免多对多表中的可空外键,sql,database,orm,h2,ormlite,Sql,Database,Orm,H2,Ormlite,我有一张多对多的桌子,看起来有点像这样。 它通过ormlite访问并存储在嵌入式h2数据库中 @DatabaseField(id = true) private String id; @DatabaseField(foreign = true, canBeNull = false, uniqueCombo = true, foreignAutoRefresh = true) private ForeignOne foreignOne; @DatabaseField(foreign = tru
@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
但是,如果将一个或两个外部成员设置为数据库中不存在的实例,则我可以将其插入数据库,下次从数据库检索实例时,插入时不存在的外部成员将为空
有没有办法避免这种情况
谢谢一个
非空
约束仅仅意味着字段不能为空,并不意味着它必须是一个有效的键。如果要确保外键实际指向外部表中的一行,则需要创建一个在ORMLite中不完全支持的。相反,你必须使用
@DatabaseField(foreign = true,
columnDefinition = "integer references foreignOne(id)" )
private ForeignOne foreignOne;
让ORMLite创建一个。或者,您可以自己创建h2数据库并包含一个