2008-12-17 54 views
10
@Column(name="DateOfBirth") 
private Date dateOfBirth; 

我特別需要上面的代碼來創建一個名爲「DateOfBirth」的列,而不是Hibernate給我一個名爲date_of_birth的列。我該如何改變這一點?有沒有web.xml屬性?我遇到了DefaultNamingStrategy和ImprovedNamingStrategy,但不知道如何指定一個或另一個。hibernate列名問題

+0

可能的工作量。如果你將它命名爲dateofbirth,那麼DB中的列將被命名爲這樣,但屬性名稱應該是相同的。 – OscarRyz 2008-12-17 21:54:34

+0

良好的通話 - 這工作。謝謝! – lucas 2008-12-17 22:13:00

+0

讓我把它當作答案:) – OscarRyz 2008-12-17 22:24:47

回答

5

以下是一種可能的解決方法:如果您將其命名爲dateofbirth DB中的列將被命名爲類似名稱,但屬性名稱應該相同。

Hibernate採用駝峯格式來創建/讀取數據庫列。

我以前有過這個問題。我使用了列名「employeename」,「employeerole」,「departmentlocation」中沒有空格的傳統列。我討厭它,因爲我所有的bean屬性都必須沒有駱駝大小寫。

用「_」分隔的數據庫列將用於正確地使用camelCase,正如您剛纔所看到的那樣。

0

我不是100%確定,但是你不需要註釋get方法而不是私有變量嗎?

+0

我不這麼認爲?至少,我可以在實例變量級別指定類似長度的東西,並且它們將相應地更改列。 – lucas 2008-12-17 21:38:49

+0

您可以註釋其中任何一個,但必須始終對其進行註釋。如果你將它們混合並註釋了一些標題和一些getters,它會找到一個並忽略另一個。 – 2015-12-05 11:04:51

6

將@Column批註上,吸氣:

@Column(name="DateOfBirth") 
public Date getDateOfBirth() { 
... 
} 
+1

這對我有用 – chaostheory 2012-06-19 01:49:50

1

您可以標註字段或getter方法,它不會有所作爲。你可以發佈完整的hibernate.cfg.xml或persistence.xml文件嗎?

1

建議的解決方法是使用@Column(name =「dateofbirth」),它適用於我的目的。

+0

你是說你唯一的改變是在大寫? – 2008-12-17 22:24:15

22

僅供參考:插入下劃線的原因可能是因爲您使用的是ImprovedNamingStrategy。它設置在您的Configuration對象上。例如,請參閱here ...

如果您不想使用下劃線,則可以不設置命名策略,或將其設置爲您之前發現的DefaultNamingStrategy。

4

ImprovedNamingStrategy有方法addUnderscores(),它是由表名()和列名()稱爲 你可以實現自己的命名策略類,並覆蓋這些按您選擇

public class MyOwnNamingStrategy extends ImprovedNamingStrategy { 
     @Override 
     public String tableName(String tableName) { 
     //return addUnderscores(columnName); // skip this 
     return columnName; // if you want column name variable name same 
     //return changeAsYouWant(columnName); // as name sames 
     } 
    } 
2

嘗試把這個在

application.properties

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl 
0

下面添加屬性春季開機的情況下。

spring.jpa.hibernate.naming.implicit策略= org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl spring.jpa.hibernate.naming.physical策略= org.hibernate.boot.model.naming .PhysicalNamingStrategyStandardImpl