2010-03-12 67 views
1

我正在使用Hibernate和JBoss 5.1的項目。我們需要將我們的實體類映射到遵循特定命名約定的Oracle表。我想避免在註釋中指定每個表和列的名稱。因此,我目前正在考慮實施org.hibernate.cfg.NamingStrategy的自定義實施。Hibernate NamingStrategy實現保持調用之間的狀態

SQL命名約定要求列的名稱具有與表名的前綴等效的後綴。如果有一個表「T100_RESOURCE」,則ID列必須命名爲「RES_ID_T100」。

爲了在NamingStrategy中實現這個,實現必須保持狀態,即它正在爲其創建映射的當前類名稱。這將依賴於Hibernate的

  • 總是前propertyToColumnName()
  • 調用classToTableName()並在下次調用之前調用propertyToColumnName()classToTableName()

,以確定所有列名是否安全,這樣做還是有Hibernate會混合什麼的情況?我沒有在這裏通過多線程來解決問題(可以通過將最後一個類名稱保留在ThreadLocal中來解決),而且在某些情況下,Hibernate也會故意調用它。例如Hibernate詢問A類的三個屬性的映射,然後是B類的一個屬性,然後是A的更多屬性。

回答

2

這聽起來像是一個非常糟糕的主意。顛覆這樣的無狀態界面幾乎肯定會流下眼淚,因爲正如你所說,Hibernate根本無法保證以正確的順序調用事物。

但是,我很驚訝這個命名約定,特別是當你考慮到Oracle對標識符有30個字符的硬連線限制時。試圖想出適合的好名字可能非常困難,而不必擔心每個列名都有表名前綴。這當然不是我見過的Oracle命名約定,它只是浪費。

+0

skaffman,我同意你說的一切。我們不會使用NamingStrategy方法。感謝您的輸入。 – 2010-03-13 14:01:08

相關問題