JPA中的@Column
和@Basic
註釋有什麼區別?它們可以一起使用嗎? 應該它們一起使用嗎?或者他們中的一個足夠了?Java Persistence/JPA:@Column vs @Basic
回答
@Basic
意味着一個屬性是被保留和標準映射到可以使用。它有一些參數可以讓你指定屬性是否被延遲加載以及是否爲空。@Column
允許您指定要將屬性保留到的數據庫中的列的名稱。
如果你指定一個沒有其他的,那麼你會得到默認的行爲,這是合理的,所以通常人們只使用一個,除了特殊情況。
因此,如果我們想要的屬性的延遲加載,並指定列名,我們可以說
@Basic(fetch=FetchType.LAZY)
@Column(name="WIBBLE")
如果我們neeed默認,不偷懶行爲則剛好@Column
就已經足夠了。
除了@ DJNA的答案,這是值得注意的是@Basic
應@OneToMany
,@ManyToOne
和@ManyToMany
進行比較。只有其中一個可以在任何屬性上指定。可以指定@Column
和@JoinColumn
以及其中的任何值來描述數據庫列屬性。這些是可以一起使用的兩組註釋,但每次只能使用一組註釋。
值得一提的是,基本設計爲原始字段
http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes
一個基本屬性是一個其中該屬性的類是一個簡單的類型,如字符串,數字,日期或原語。基本屬性的值可以直接映射到數據庫中的列值。
支持的類型和轉換依賴於JPA實現和數據庫平臺。使用不直接映射到數據庫類型的類型的任何基本屬性都可以序列化爲二進制數據庫類型。
在JPA中映射基本屬性的最簡單方法是什麼也不做。任何沒有其他註釋並且不引用其他實體的屬性都將被自動映射爲基本類型,甚至是基本類型的序列化。該屬性的列名稱將被默認,與屬性名稱相同,大寫。
好注意。謝謝。 – 2013-05-14 19:10:02
因此,這並不意味着您必須指定@Column for non-primitives,right?.. – Amalgovinus 2015-12-04 21:05:12
不,如果沒有指定Column註釋,則默認值適用(名稱將是屬性1)。 – Gab 2015-12-07 15:23:10
- 1. Computed Column(COALESCE vs CASE vs ISNULL)
- 2. Breeze謂詞:column = null vs column IS NULL
- 3. GridView列與Vs. DataList Column
- 4. Visual Basic Vs Dreamweaver CS4
- 5. Ws-basic profile 1.0 vs Ws-basic profile 1.1
- 6. W3TOTAL CACHE:Disk Enhanced Vs Disk Basic
- 7. Flask-SQLAlchemy whats the difference db.Column vs Column
- 8. SQL COUNT(col)vs extra logging column ...效率?
- 9. basic radiobutton issue - java
- 10. Basic Java arraylist
- 11. no such column _id Android,Java,SQL
- 12. oozie sqoop action --map-column-java
- 13. <column> IS NULL vs <column> =在LINQ to SQL生成SQL中的NULL
- 14. Java Basic Gui示例
- 15. angular angular column by column
- 16. 的Visual Basic 6,刷新或與VS
- 17. Visual Basic默認屬性vs C#屬性
- 18. Column to vector/vector to column,Originlab
- 19. Bang vs vs Visual Basic中的默認屬性
- 20. @column或@Basic JPA批註在spring-data-jpa模式創建中被忽略
- 21. Java Game Dev:Sprite sheet frame by row and column?
- 22. 的Java的Oracle JDBC COLUMN語句
- 23. ALTER COLUMN
- 24. 守望者vs Rack :: Auth :: Basic。在Ruby-Framework中執行HTTP-Basic-Auth認證
- 25. 什麼時候應該使用dt.column vs dt ['column']熊貓?
- 26. SQL性能問題(沒有where子句VS其中column LIKE '%')
- 27. mysql select count(column)where sum(column)> value
- 28. Mysql:if else else from one column to another column
- 29. 如何在Mongo中「(WHERE)column = column」?
- 30. mysql SELECT * FROM table WHERE column + space + column LIKE'%query%'
這是一個明確的答案。謝謝。所以我假設你可以在沒有'@ Column'的情況下使用'@ Basic',這就是爲什麼'optional'和'nullable'兩個屬性都存在的原因。我對嗎? – 2009-09-05 14:30:22
我並不是完全理解JPA規範中關於@ Basic可空和@ Column可空以及兩者或兩者都沒有指定的效果之間的區別。 @Basic nullable被描述爲一個「提示」,具有對模式生成的依賴。 @Column nullable被描述爲定義數據庫中列的特徵。我的做法是使用@Column的情況。 – djna 2009-09-05 22:16:09
@Basic(可選)在保存到數據庫之前由持久性提供程序在運行時檢查(應該)。@Column是數據庫中的一個列定義,用於模式生成:http://stackoverflow.com/questions/2899073/basicoptional-false-vs-columnnullable-false-in-jpa – 2010-06-16 10:30:01