2011-12-22 56 views
4

我們通過指定全自動創建我們的表並通過休眠:休眠忽略@Table(name =「...」)的擴展類 - 創建表名全部小寫

@Table(name = "some_table") 

這用來爲「正常工作「實體。但是,當我們有一個抽象基類:

@Entity 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
public class PersonBankAccount extends AbstractPersistable<Long> { 

@Entity 
@Table(name = "person_bank_account") 
public class PersonBankAccountSimple extends PersonBankAccount { 

生成的數據庫中的表擴展名爲

personbankaccount 

這到底是怎麼回事?

自動發生器說:

table not found: PersonBankAccount 

當第一次創建並重新運行上,他說:

table found: personbankaccount 

就像我說的,正常的表一切工作正常。

+1

不確定它是否相關,但在使用單表繼承策略時需要指定鑑別器列和值。 – Perception 2011-12-22 14:56:57

+0

@Perception我不認爲你**必須**提供鑑別器列。 JPA 2.0 FR規範說(11.1.10「DiscriminatorColumn Annotation」):*「如果DiscriminatorColumn註釋缺失,並且需要鑑別器列,則鑑別器列的名稱默認爲」DTYPE「,鑑別器類型爲STRING。 * – 2011-12-22 15:22:20

+0

是的,他自動做到這一點。想知道那些DTYPE列來自哪裏......;)如果我在每個目標應用程序中總是隻有一個擴展類,我真的可以禁用這些列嗎? – Pete 2011-12-22 15:25:32

回答

6

不應該是基類中表的名稱。

@Entity 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@Table(name = "person_bank_account") 
public class PersonBankAccount extends AbstractPersistable<Long> { 
+0

我想我試過了,它不起作用,可能僅用於連接表繼承。但我會再試一次,看看會發生什麼。也許在這兩個類中都有一個表名。事情是,一切工作正常,設置,應用程序邏輯和所有,只是名稱很奇怪.. – Pete 2011-12-22 15:13:40

+0

看起來像它的工作,但我想知道爲什麼我決定將表名放入擴展類中。我現在必須有一個理由逃避,因爲把這個名字放在基類中似乎是自然而合乎邏輯的。哦,好吧,謝謝!) – Pete 2011-12-23 06:07:16