2014-03-19 67 views
5

我試圖在一個名爲ECM的表(,大寫)在一個帶有Hibernate的Sybase db中執行一個簡單的SELECT查詢。我已經註釋我DBO這樣:如何告訴Hibernate註釋@Column區分大小寫?

@Entity 
@Table(name="ECM") 
public class RelationshipDbo { 
    ... 
} 

不過,我面對錯誤「未找到表」:生成的SQL在小寫的表名。我無法更改數據庫配置以使其不區分大小寫。

我也試圖把報價是這樣的:

@Table(name="`ECM`") 

這:

@Table(name="'ECM'") 

結果:引號中查詢添加,但該表的名稱仍是從大寫轉換以小寫字母。

技術信息:

Hibernate 4.3 
JPA 1.2 
org.hibernate.dialect.SybaseDialect 

有你們的任何想法?

編輯:也試過這個Hibernate changes @Table(name) to lowercase

然後我列名和表名都自動報價,但名稱仍然可以小寫。

+0

嗨@Deathtiny,你能找到解決這個問題的方法,我也面臨同樣的問題。 – AmanSinghal

回答

1

試試這個:

使用反引號作爲@Table(name="`ECM`")?

這必須從休眠點工作。如果不是,那麼問題應該在DB(如果我沒有錯)

+0

已經過測試,並且不成功,正如我的文章所述。問題在於,即使有人引用,ECM信件由於某種原因而被縮小。 – Deathtiny

0

什麼是你的Sybase db版本? SybaseDialect已經在Hibernate 3.5中被棄用,並且自從Hibernate 4.1帶有一些與不同版本的Sybase匹配的子類之後重構。您是否嘗試過其中一個子類來查看它是否有所作爲?

  • org.hibernate.dialect.Sybase11Dialect
  • org.hibernate.dialect.SybaseAnywhereDialect
  • org.hibernate.dialect.SybaseASE15Dialect
+0

謝謝,嘗試了三種可能的方言,但生成的SQL保持不變:總是我的表名小寫。 – Deathtiny

+0

奇怪。我通過在現有項目(使用H2 in-mem db)中切換到SybaseDialect來運行快速測試,並且我的SQL輸出中的情況正確。我在配置中看到的主要差異是我使用的是JPA 2.1。不知道這是否有所作爲。 – Julien

1

我想我有你的答案:

基本上,您需要爲您的JPA提供者更改命名策略。你如何做到這一點將取決於你如何設置你的項目。

在我的情況下,使用彈簧引導數據我將在我的application.properties一個屬性來

spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.EJB3NamingStrategy 

如果沒有更多的細節,從你我不能就如何做到這一點更多的細節。

1

我的目標是有點不同,因爲它試圖創建表大寫和休眠創建它們在小寫。另外我使用MySQL而不是Sybase。 但對我引用這樣的名字的工作:

@Entity 
@Table(name="\"ECM\"") 
public class RelationshipDbo { 
    ... 
} 

然後表創建大寫。也許這也有助於查詢。

+0

看起來很醜但實際上很有效。 但是,最好的選擇是改變Hibernate的命名策略,@see https://stackoverflow.com/a/39194169/956727 – abarre