我的web框架(Play 1.2.5)創建了一個本地EJB3Configuration,它使用它來創建一個EntityManagerFactory
(source)。我正在研究一個腳本,並希望從配置中運行generateSchemaUpdateScript()
方法來製作SQL腳本,我可以在生產部署中驗證並運行該腳本。我遇到的問題是我無法弄清楚如何在構建EntityManagerFactory
之後訪問使用的Configuration對象或如何生成配置對象。如何在EntityManagerFactory生成後獲得Hibernate配置?
回答
你不能得到配置對象從EntityManagerFactory的回來,因爲Hibernate實現EntityManagerFactoryImpl不成立的配置對象
你的選擇是
- 複製從JPAPlugin代碼在你的腳本來創建一個參考你自己的配置對象
- 配置hibernate工具來處理你的類。我從來沒有使用過這個工具自己,但我想,正確配置,他可以爲您生成DDL
- 從數據庫
產生回DDL腳本一旦實體管理器工廠已經創造了你不應該有配置對象的句柄,部分原因是配置應該表現出不可改變的行爲,因爲你不能改變它的屬性。
我指到Hibernate 3.6.8源和EJB3Configuration類有方法,不贊成使用其所有功能移動到配置類
public AnnotationConfiguration getHibernateConfiguration() {
//TODO make it really read only (maybe through proxying)
return cfg;
}
AnnotationConfiguration聲明。
所以我認爲使用它你可以在你的配置被創建後得到句柄。您必須非常小心,儘管不要在該配置中更改任何內容。
這的javadoc解釋here
#buildEntityManagerFactory()被調用後,你不再能 更改配置狀態(無級添加,無屬性變化 等)
說了這麼多,你要實現的目標做的東西是嚴格不建議特別是對生產數據庫。請參閱here
Hibernate具有一個名爲「hibernate.hbm2ddl.auto」的屬性,該屬性用於在演變腳本的情況下協助模式自動生成。你正在努力實現編程有同樣的效果如給它在你的持久XML 更新像下面的值。實際上,當您具有「hibernate.hbm2ddl」的值時,generateSchemaUpdateScript方法將由配置調用。汽車」設置爲‘更新’
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="xyz" transaction-type="RESOURCE_LOCAL">
<properties>
....................
<property name="hibernate.hbm2ddl.auto" value="update"/>
......................
</properties>
</persistence-unit>
</persistence>
您可以參考其他可能值這個屬性here
然而在Hibernate文檔stricltly建議不要使用此對生產數據庫。
的權威書籍休眠 「與Hibernate的Java持久」 提醒人們這
警告我們已經看到了喜bernate用戶試圖使用SchemaUpdate至 自動更新生產數據庫的模式。這可能會在災難中迅速結束,並且不會被DBA允許。
,也對更新模式處理一些限制
此配置屬性的附加選項,更新,可以在開發過程中 有用的:它使內置SchemaUpdate工具對, 從而可以使架構演變更容易。如果啓用,Hibernate會在啓動時讀取JDBC數據庫元數據 ,並通過比較舊架構與當前映射 元數據來創建新表和 約束。請注意,此功能取決於JDBC驅動程序提供的元數據的質量,這是缺少許多驅動程序的區域。在實踐中,這個功能因此不那麼令人興奮,並且比起聽起來有用。
更新1:如果您沒有訪問EJB3Configuration和你的最終目的是創造JPA註明實體的更新模式腳本,那麼你可以以編程方式創建使用的持久性在Java主類的EJB3Configuration包含數據庫配置細節的xml文件並運行模式導出工具。請參閱this示例,瞭解如何執行此操作。因此,您可以通過這種方式在您的框架之外甚至容器之外的JPA實體上運行該工具。
更新2
的示例代碼中列出here顯示播放應用程序創建數據庫遷移時,你可以如何使用Hibernate架構更新。看起來像這就是你想要的!
由於我無法控制的原因,我無法訪問EJB3Configuration實例,所以我無法從中獲取配置。我同意你的額外建議,我目前的計劃是針對我的開發數據庫運行generateSchemaUpdateScript(),並檢查更新sql並讓我的DBA在驗證它之後運行它。 –
如果有幫助,請參閱我上面的更新! – Shailendra
我在「更新2」部分添加了一個鏈接,看起來像做你想做的事情! – Shailendra
- 1. 如何在Spring Tool Suite中生成Hibernate配置文件?
- 2. 如何在entityManagerFactory中注入Hibernate Interceptor類
- 3. Hibernate SessionFactory與EntityManagerFactory
- 4. Intellij Hibernate實體生成配置
- 5. 如何重置Hibernate序列生成器?
- 6. Spring + Hibernate:如何擁有一個可配置的PK生成器?
- 7. 從JPA的entityManagerFactory獲取Hibernate SessionFactory
- 8. 如何獲取Hibernate配置屬性?
- 9. Spring/Hibernate:如何從LocalContainerEntityManagerFactoryBean獲取配置
- 10. 如何獲得ExecutableValidator? Hibernate Validator
- 11. spring + hibernate entityManagerFactory/configurations/context .xml
- 12. 配置生成
- 13. 如何在hibernate中按需生成GUID?
- 14. 如何正確配置Hibernate
- 15. 如何配置Hibernate與UCP
- 16. 如何在加入Hibernate Criteria後獲得行數?
- 17. 如何獲得用javascript生成的HTML?
- 18. 如何獲得自動生成的值?
- 19. 我如何獲得javascript生成的html?
- 20. EntityManagerFactory在遷移到spring的hibernate 5.2.6後不能爲空
- 21. 如何從用戶獲得輸入後生成EXE文件#
- 22. Hibernate的JPA如何配置在persistence.xml中
- 23. Hibernate SessionFactory:如何在Tomcat中配置JNDI?
- 24. 如何在Hibernate中配置StatementInspector?
- 25. 如何在JBoss中配置Hibernate
- 26. 如何在Eclipse Galileo中配置hibernate 3.3?
- 27. 如何配置pdf生成的ZeroClipboard?
- 28. 如何更改JCaptcha生成配置?
- 29. XCode 5:如何僅生成Debug配置
- 30. 如何生成配置腳本 - Linux的
我建議與DBA討論任何可用的模式工具。他們可能能夠爲您複製架構或提供腳本。 – MarkOfHall