2009-08-02 86 views
6

當我運行我的hibernate工具時 它從db中讀取數據,併爲每個表創建java類, 和用於組合主鍵的java類。 很好。運行沒有「目錄」屬性的hibernate工具註釋生成

問題是此行

@Table(name="tst_feature" 
    ,catalog="tstdb" 
) 

而需要的表名,「目錄」是不是必需的屬性。 有時我想用「tstdb」,有時我想用「tstdev」

我想選擇哪個數據庫取決於JDBC連接URL 但是當我改變JDBC URL指向「tstdev」,它依然採用「tstdb」

所以, 我知道必須做什麼, 只是不知道它是怎麼做的 我的選擇是

  • 抑制「目錄」屬性 的一代目前我正在手動(不是收穫頗豐) 或者我可以寫一個分析Java文件的程序和手動刪除屬性 但我希望我沒有

OR

  • 找到一種方式來告訴休眠忽略「目錄」屬性並使用明確指定的模式。 我不知道確切的設置,我必須改變以實現這一點,或者即使該選項可用。

回答

7

您需要按照3個步驟 -

1)在hibernate.cfg.xml,添加該屬性

hibernate.default_catalog = MyDatabaseName 

(如上文後規定)

2)在hibernate.reveng.xml,添加所有像這樣的表格過濾器

table-filter match-name="MyTableName" 

(just這一點,在這裏沒有目錄名)

3)重新生成Hibernate代碼

你不會在任何*.hbm.xml文件中看到任何目錄名稱。

我已經使用Eclipse Galileo和Hibernate-3.2.4.GA。

1

有一個定製的代,這將告訴哪些表放入什麼目錄。

您可以手動指定目錄(在reveng文件中,<table>元素)或編程(如果我記得很清楚,在您的自定義ReverseEngineeringStrategy類中)。我最近不得不修改生成模板。

見參考文獻:

對不起,這可能會更精確,但我現在無法訪問我的工作計算機。

+0

表元素選擇目錄中的表格, 是的。 但這不是我想要的。 我想不「目錄」屬性生成實體 如果目錄的屬性是存在的,不管我的JDBC URL是什麼,它仍然將指向相同的架構, 我希望能夠切換模式而不重新生成實體。 – 2009-08-03 10:07:35

0

屬性目錄是一個「連接」屬性,應該在「連接」配置文件hibernate.cfg.xml中指定,而不是在「數據」配置文件*.hbm.xml中指定。

我通過ant任務<hibernatetool>生成休眠代碼,並在再生後將此替換任務(將模式名替換爲您的數據庫)。

<replace dir='../src' token='catalog="schema-name"' value=''> 

因此,在生成後,屬性目錄已被刪除。

這是一種解決方法,但生成的代碼在我的開發中適用於具有不同架構名稱的生產環境。