2016-12-05 25 views
0

我正在閱讀this tutorial並且是否有任何定義主鍵的註釋值是多餘的?這些jpa註釋值是否是多餘的?

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name = "id", nullable = false, updatable = false) 
private Long id; 

換句話說可以在筆者只是:

@Id 
private Long id; 

,並得到同樣的結果?

回答

1

沒有註釋是冗餘。它們中的每一個都會影響非常具體的行爲,具體取決於您的域模型的需求。

  • @Id
    此註釋標識應參與實體的主鍵的屬性/字段。
  • @GeneratedValue
    此批註允許指定應該如何派生屬性/字段的值。如果省略此註釋,則假定該值由應用程序提供。
  • @column
    此註釋描述屬性/字段的模式表示,指定名稱,插入的特性,可更新性和可空性設置等。通過省略此註釋,持續提供者將使用一系列默認值值來表示屬性/字段的數據庫模式表示。

Ergo在您的前一個示例中,標識符值將由數據庫級別的AUTO_INCREMENT或IDENTITY表示形式派生,並將映射到名爲「id」的非空字段。

在後面的例子中,假設標識符值被提供,因此它必須在持久化實體之前設置。在這種特定情況下,排除@Column註釋與此無關,因爲Hibernate將使用以屬性名稱命名的列,因此將使用字段「id」。主鍵默認情況下不可爲空且不可更新。