2017-01-09 43 views
1

假设我们有实体名为Element,那些实体可能属于名为Layout的实体。元素和布局具有ManyToOne关系,其中Many Elements属于一个Layout没有现有实体的学说ORM默认值

使用的数据库引擎是MySQL,此外我们使用一个唯一的密钥,layout_id是其中的一部分。因此,我们在Elements表中有一个名为layout_id的列,它不能是null(由于组合唯一键),并且缺省值为00的值是一个魔法值,并且在整个代码库中都被视为“无布局分配”(因此,在ElementLayout之间没有FK)。

原理ORM的问题在于它试图加载ID为0的布局,因为它不存在而无法找到。我们无法创建ID为0Layout条目,因为Layouts具有其他外键并且存在其他约束。

有没有关于如何克服这个问题的建议。基本上,当Element中的layout_id0时,我们不想加载Layout

回答

1

在这种情况下,您不能将layout_id设置为组合键的一部分。这是因为外键约束。您的layout_id必须是nullable(意味着它不能是复合键的一部分),或者您必须在ID为0的layout表中创建一行(以便它可以用作标识符)。

一个解决方案可能是不使用组合键,而是添加一个主键列来唯一标识您的实体(代理键)。