2010-01-28 80 views
7

我有一個名爲「Group」的實體類,NetBeans警告我「實體表名是保留的Java Persistence QL關鍵字」。使用保留的JPQL關鍵字與JPA

類似的情況是使用保留的SQL關鍵字。

這個名字會被轉義嗎?使用不同的表名將解決問題@Table(name =「otherName」)。或者我應該重新命名課程?

回答

11

這個名字會被轉義嗎?

什麼在JPA規範是這麼說的,如果您的提供商做,這是特定的供應商。

會使用不同的表名稱的解決問題@Table(name =「中文別名」)

顯然,它會(只要你不使用,當然另一個保留關鍵字)。但是,如果你使用的是JPA 2.0提供商,有一個標準的方式來獲得一個數據庫對象名逃了出來,用雙引號:

@Table(name="\"Group\"") 

在JPA 1.0,沒有什麼標準,這取決於您的JPA提供商。例如,Hibernate使用反引號:

@Table(name="`Group`") 

或者我應該命名類?

不。實體的表名稱默認爲實體名稱,但您可以使用@Table註釋對其進行控制,如我們所見。因此不需要更改實體的類名稱。

+2

如果使用這種引號,任何組合表(f.e. OneToMany關係)將無法創建(「組」_Members f.e.是無效名稱)。這個解決方案是一個黑客攻擊,我建議不要使用表的保留名稱。字段名稱不太成問題。 – Steven 2013-12-27 08:33:15

4

您不必重命名類 - 而且您也不應該 - 您選擇的名稱以最佳方式反映了您的域,並且由於工具或框架限制,您不應該更改它,以防工具/ framework提供了避免「衝突」的方法。 JPA提供了這種方式。

+0

不,「@Entity(name」foo「)」的名稱元素是別的,它用於定義要在JPQL查詢中使用的名稱。它已經注意到了數據庫對象。 – 2010-09-05 21:24:45

+0

已更正。 (15chr) – Bozho 2010-09-05 21:59:30