我正在尋找一些信息/文檔,這有助于我理解為什么在繼承的情況下,(ManyToOne 或 OneToOne)連接不是使用存儲名稱完成的,而是使用相應實體對象類的屬性名稱......有人可以嗎請解釋一下基本機制?我指的特殊情況是,當連接字段不是外鍵時。特別是我指的是這個代碼部分:ManyToOneJoinBuilder.php,第 57 行當不涉及外鍵時,將使用 propertyName 進行連接,但顯然這不能與 storageName 相同...并且在執行生成的 sql 時生成錯誤!
1 回答

阿波羅的戰車
TA貢獻1862條經驗 獲得超6個贊
DB表中需要有額外的字段,其中外鍵以讀取優化的方式保存。這里的約定是使用屬性名稱作為列名稱。
來自文檔
對于每個繼承的字段,您必須向實體添加一個二進制列,用于以讀取優化的方式保存繼承的信息
如果您查看 的列,product
您會發現名為manufacturer
、tax
或 的列deliveryTime
。這些是存儲 FK 獲取的列,用于連接匹配關聯。
這對于數據抽象層來說是必要的,因此它可以連接關聯的表,而無需讀取父實體的行。這極大地提高了性能,因為您可以在一個 SQL 查詢中加入多個關聯,并且數據庫可以對該查詢進行優化。否則,您需要首先讀取實體和父實體,只是為了弄清楚某些關聯是否從父實體繼承到子實體,以及在哪個 FK 上執行連接。
- 1 回答
- 0 關注
- 110 瀏覽
添加回答
舉報
0/150
提交
取消