Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 避免多对多表中的可空外键_Sql_Database_Orm_H2_Ormlite - Fatal编程技术网

Sql 避免多对多表中的可空外键

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

我有一张多对多的桌子,看起来有点像这样。 它通过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

但是,如果将一个或两个外部成员设置为数据库中不存在的实例,则我可以将其插入数据库,下次从数据库检索实例时,插入时不存在的外部成员将为空

有没有办法避免这种情况


谢谢

一个
非空
约束仅仅意味着字段不能为空,并不意味着它必须是一个有效的键。如果要确保外键实际指向外部表中的一行,则需要创建一个在ORMLite中不完全支持的。相反,你必须使用

@DatabaseField(foreign = true,
               columnDefinition = "integer references foreignOne(id)" )
private ForeignOne foreignOne;
让ORMLite创建一个。或者,您可以自己创建h2数据库并包含一个