2009-09-05 40 views

回答

126
  • @Basic意味着一個屬性是被保留和標準映射到可以使用。它有一些參數可以讓你指定屬性是否被延遲加載以及是否爲空。

  • @Column允許您指定要將屬性保留到的數據庫中的列的名稱。

如果你指定一個沒有其他的,那麼你會得到默認的行爲,這是合理的,所以通常人們只使用一個,除了特殊情況。

因此,如果我們想要的屬性的延遲加載,並指定列名,我們可以說

@Basic(fetch=FetchType.LAZY) 
@Column(name="WIBBLE") 

如果我們neeed默認,不偷懶行爲則剛好@Column就已經足夠了。

+1

這是一個明確的答案。謝謝。所以我假設你可以在沒有'@ Column'的情況下使用'@ Basic',這就是爲什麼'optional'和'nullable'兩個屬性都存在的原因。我對嗎? – 2009-09-05 14:30:22

+0

我並不是完全理解JPA規範中關於@ Basic可空和@ Column可空以及兩者或兩者都沒有指定的效果之間的區別。 @Basic nullable被描述爲一個「提示」,具有對模式生成的依賴。 @Column nullable被描述爲定義數據庫中列的特徵。我的做法是使用@Column的情況。 – djna 2009-09-05 22:16:09

+15

@Basic(可選)在保存到數據庫之前由持久性提供程序在運行時檢查(應該)。@Column是數據庫中的一個列定義,用於模式生成:http://stackoverflow.com/questions/2899073/basicoptional-false-vs-columnnullable-false-in-jpa – 2010-06-16 10:30:01

42

除了@ DJNA的答案,這是值得注意的是@Basic@OneToMany@ManyToOne@ManyToMany進行比較。只有其中一個可以在任何屬性上指定。可以指定@Column@JoinColumn以及其中的任何值來描述數據庫列屬性。這些是可以一起使用的兩組註釋,但每次只能使用一組註釋。

19

值得一提的是,基本設計爲原始字段

http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes

一個基本屬性是一個其中該屬性的類是一個簡單的類型,如字符串,數字,日期或原語。基本屬性的值可以直接映射到數據庫中的列值。

支持的類型和轉換依賴於JPA實現和數據庫平臺。使用不直接映射到數據庫類型的類型的任何基本屬性都可以序列化爲二進制數據庫類型。

在JPA中映射基本屬性的最簡單方法是什麼也不做。任何沒有其他註釋並且不引用其他實體的屬性都將被自動映射爲基本類型,甚至是基本類型的序列化。該屬性的列名稱將被默認,與屬性名稱相同,大寫。

+0

好注意。謝謝。 – 2013-05-14 19:10:02

+0

因此,這並不意味着您必須指定@Column for non-primitives,right?.. – Amalgovinus 2015-12-04 21:05:12

+1

不,如果沒有指定Column註釋,則默認值適用(名稱將是屬性1)。 – Gab 2015-12-07 15:23:10

相關問題