2012-11-21 31 views
3

我在Hibernate中有一個Table Per Class Inheritance。休眠將@Table(名稱)更改爲小寫

@Entity 
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) 
public abstract class A { 
} 

@Entity 
@Table(name="B") 
public class B extends A { 
} 

@Entity 
@Table(name="C") 
public class C extends A { 
} 

我只是想驗證架構。我已經在B和C表中分貝。

我使用的是<property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/>但我認爲指定@Table(name)會覆蓋命名策略的行爲!

爲什麼hibernate將@Table中指定的名稱轉換爲lowerCase並搜索b和c而不是B和C?怎麼能避免它?

+0

試試看看這個主題:http://stackoverflow.com/questions/6218713/hibernate-scheme-naming-differs-between-os和這一個:http://stackoverflow.com/questions/8739010/hibernate-慣於的負載某些表-下不同-OS –

回答

2

如果你正在使用JPA 2.0,該規範說:

有可能由 持久化單元內指定<delimited-identifiers/>元素來指定使用的所有數據庫標識符持久化單元的分隔標識符進行處理對象/關係xml映射文件的默認元素。如果指定了 <delimited-identifiers/>元素,則它不能被覆蓋。

此設置應該會導致Hibernate使用表的大寫名稱,因爲這是您在註釋中指定名稱的方式。