自引用關係是與自身有關係的關係。
當你將實體儲存在樹狀結構中時,這會非常有用。
"adjacency list"模式也使用自引用關係來實現。
例如,你想在應用程式中建立 categories 樹。
categories 可以巢狀 categories,巢狀類別可以巢狀其他類別等。
自引用關係在這裡很方便。
基本上,自引用關係只是針對實體本身的常規關係。
例如:
import
from
"typeorm"
;@entity()
export
class
category
import
from
"typeorm"
;@entity()
export
class
profile
import
from
"typeorm"
;import
from
"./profile"
;@entity()
export
class
user
當載入沒有profile
加入的使用者時,你將無法在使用者物件中獲得有關個人資料的任何資訊,
甚至個人資料 id:
user
但有時您想知道此使用者的"profile id"是什麼,而不載入此使用者的全部個人資料。
要做到這一點,你只需要使用@column
向實體新增另乙個屬性完全命名為自己關係建立的列。
例如:
import
from
"typeorm"
;import
from
"./profile"
;@entity()
export
class
user
) profileid:
number
; @onetoone
(type
=> profile)
@joincolumn()
profile: profile;
}
就這樣,下次載入使用者物件時,它將包含乙個配置檔案 id:
user
載入實體關係的最簡單方法是在findoptions
中使用relations
選項:
const users =
await connection.
getrepository
(user)
.find()
;
另一種更靈活的方法是使用querybuilder
:
const user =
await connection
.getrepository
(user)
.createquerybuilder
("user").
leftjoinandselect
("user.profile"
,"profile").
leftjoinandselect
("user.photos"
,"photo").
leftjoinandselect
("user.videos"
,"video").
getmany()
;
使用querybuilder
你可以做innerjoinandselect
而不是leftjoinandselect
(要了解left join
和inner join
之間的區別,請參閱 sql 文件),你可以通過條件加入關係資料、進行排序等。
學習更多關於querybuilder
。
有時先初始化關係屬性很有用,例如:
import
from
"typeorm"
;import
from
"./category"
;@entity()
export
class
question
但是在 typeorm 實體中,它可能會導致一些問題。
要理解這個問題,讓我們首先嘗試載入乙個沒有初始化集的 question 實體。
當載入 question 時,它將返回如下物件:
question
現在,當你儲存此物件時,categories
將不會被觸及 - 因為它未被設定。
question
儲存物件時,它將檢查資料庫中是否有任何 categories 繫結到 question 並且會將它們之間相互分離。 為什麼? 因為關係等於
或其中的任何專案將被視為從中刪除了某些內容,所以沒有其他方法可以檢查物件是否已從實體中刪除。
因此,儲存這樣的物件會給帶來一些問題,它將刪除所有以前設定的 categories。
如何避免這種行為? 只是不要在實體中初始化陣列就行。
同樣的規則適用於建構函式,但也不要在建構函式中初始化它。
常見問題 朗動常見問題
常見問題一 方向盤變沉 檢查胎壓是否正常,輪胎是否過度磨損。助力幫浦不工作,前輪氣壓低。冬天的話,冷車在冬天助力油比較稠,方向會重一點。檢查轉向助力油。1 應該是是助力系統有問題或則助力潤滑油有問題。2 如果你在駕車時感覺方向盤變緊,汽車偏向一側,需要檢查輪胎,或進行車輪平衡 定位。在這些問題剛剛發...
面試常見問題 1 this的常見問題
this 的含義 this關鍵字是乙個非常重要的語法點。毫不誇張地說,不理解它的含義,大部分開發任務都無法完成。前一章已經提到,this可以用在建構函式之中,表示例項物件。除此之外,this還可以用在別的場合。但不管是什麼場合,this都有乙個共同點 它總是返回乙個物件。簡單說,this就是屬性或方...
Spring常見問題
1 利用spring框架程式設計,console列印出log4j warn please initialize the log4j system properly?lupa開源社群 u i w.d t 說 明你的log4j.properties沒有配置。請把log4j.properties放到工程的...