JHipster 領域語言 (JDL) - 關聯關係

概要

  1. 關聯型別
  2. 關係方法
  3. 多個關係體
  4. 語法
  5. 範例
    1. 簡單例子
    2. 關係屬性名
    3. 與屬性(欄位)聯合
    4. 方法使用
    5. 非空設定
    6. 自反關係
    7. 註解

關係型別

relationship關鍵字之後是以下內容。

有四種關係型別:

  • OneToOne
  • OneToMany
  • ManyToOne
  • ManyToMany

要了解有關關係以及可能實現的更多訊息,可以前往關聯關係.

關於複數名稱的說明:JHipster會處理它們,這樣您就不必在關係中處理了。


關係方法

在源實體和目標實體之後是關係方法,與with關鍵字一起使用。

支援的方法:

  • jpaDerivedIdentifier: @MapsId 用於關聯關係 (僅適用於OneToOne)

多個關係體

如果您厭倦了JDL檔案中具有相同型別的關係宣告,請不用擔心! 有一個解決方案。

以這個JDL範例為例:

relationship OneToOne {
  A to B
}
relationship OneToOne {
  B to C
}
relationship OneToOne {
  C to D
}
relationship OneToOne {
  D to A
}

該解決方案由具有每一種關係體內的關係的宣告,如下所示:

relationship OneToOne {
  A to B,
  B to C,
  C to D,
  D to A
}

在以下情況下,此語法非常有用:

  • 你有許多相同型別的關係,
  • 你想知道這些關係是什麼,
  • 你不想浪費時間在JDL檔案中尋找它們

語法

關係宣告如下:

relationship (OneToMany | ManyToOne | OneToOne | ManyToMany) {
  <from entity>[{<relationship name>[(<display field>)]}] to <to entity>[{<relationship name>[(<display field>)]}]+
}
  • (OneToMany | ManyToOne| OneToOne | ManyToMany) 是你的關係型別
  • <from entity> 是關係的實體所有者的名稱:源實體,
  • <to entity> 是關係要到達的實體的名稱:目的實體,
  • <relationship name> 是具有另一端型別的屬性名稱,
  • <display field> 是應顯示在選擇框中的欄位名稱(預設值:id),
  • required 引入的關係屬性是否不能為空。
  • with jpaDerivedIdentifier@MapsId 用於關聯關係 (僅適用於一對一(one-to-one)
  • 而且您可以擁有多個關係主體

範例

簡單例子

relationship OneToOne {
  A to B
}

請注意,此範例與以下範例相同:

relationship OneToOne {
  A{b} to B
}

不指定引入屬性名是使用具有單向關係的簡短形式。


關係屬性名

relationship ManyToMany {
  A{b} to B{a}
}

這是一種雙向關係,這意味著兩個實體將在另一個實體的”實例”下生成實體。


與屬性(欄位)聯合

用於指定實體中的哪一列用於join聯接(預設為id)。

relationship OneToOne {
  A{b(name)} to B{a(name)}
}

它大致翻譯為SQL: JOIN B b with a.name = b.name


With 方法

relationship OneToOne {
  A to B with jpaDerivedIdentifier
}

非空的設定

用於使至少需要一個關係。

relationship ManyToMany {
  A{b required} to B{a}
}

// or

relationship ManyToMany {
  A{b} to B{a required}
}

or

relationship ManyToMany {
  A{b(name) required} to B{a required}
}

自反關係

自反關係是指源實體和目標實體相同的關係。

relationship ManyToMany {
  A{parent} to A{child}
}

關於自反性關係中非空設定的說明

如前所述 此外,不支援與同一實體的非空設定。 問題是,一個child必須總是有一個父母,而parent又必須也有一個child,等等。 一個可能的解決方法是擁有顯式的根實體和子實體。


註解

可以為關係新增註解:

relationship OneToOne {
  /** This comment will be put before b in entity A*/
  A{b}
  to
  /** This comment will be put before a in entity B*/
  B{a}
}

此處應用了相同的註解規則。 這些註解稍後將由JHipster新增為Javadoc註解。 JDL擁有自己的註解型別:

  • // an ignored comment
  • /** not an ignored comment */

因此,以//開頭的任何內容都被視為JDL的內部註解,因此不會被視為Javadoc。 請注意,在解析期間,以開頭的JDL Studio指令將被忽略。