有一個使用Java + Hibernate + PostgreSQL的企業應用程序。 Hibernate通過Java源代碼中的註釋進行配置。到目前爲止,數據庫模式是固定的,但我面臨的問題是它需要是動態的:我可以接收來自不同位置的數據,並且我必須將這些數據存儲在不同的表中。這意味着我必須創建表運行時。幸運的是,所有來自不同研究機構的數據似乎都具有相同的模式。但我仍然不知道如何使用Hibernate來做到這一點。有兩個主要問題:在Hibernate環境中動態創建表
- 如何告訴Hibernate許多不同的表具有相同的結構?例如,「Patient」類不僅可以映射到「患者」表,而且還可以映射到「patient_mayo_clinic」表,「patient_northwestern」表等。我可以感覺到這會導致模糊性:Hibernate如何知道當我訪問哪個表時在Patient類上進行操作?它可以是前列表中的任何一個(但只有一個)。
- 我該如何動態地使用Hibernate創建表並將類綁定到它們?
應對建議: 感謝所有的建議。到目前爲止,所有的答案都不鼓勵動態創建表格。我會標記Axel的答案,因爲它實現了某些目標,並且它是一個受支持的解決方案。更具體地說,它被稱爲多租戶。有時候瞭解一些描述我們問題的重要短語(或者我們的問題的一部分)很重要。 以下是有關多租戶一些鏈接:
- Multi-tenancy in Hibernate
- Hibernate Chapter 16. Multi-tenancy
- Multi-tenancy Design
- EclipseLink JPA multi-tenancy
在現實世界中的場景多租戶還包括隔離套的區域的數據(也就是通過不同憑據訪問和授權的方式)電子表格。
謝謝阿克塞爾。我想過,但我會看看是否有人提供其他建議。 – 2011-01-13 22:58:58
那麼,你有這種方法:http://www.docjar.org/docs/api/org/hibernate/cfg/Configuration.html#add%28Document%29,但正如javadoc所說:配置只是作爲一個初始化時間對象。 SessionFactorys是不可變的,不會保留任何關聯回配置。 – 2011-01-14 12:01:24