2017-01-09 78 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表中創建一行(以便它可以用作標識符)。

一個解決方案可能是不使用組合鍵,而是添加一個主鍵列來唯一標識您的實體(代理鍵)。