亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hibernate和模型對象怎么理解

發布時間:2021-12-06 09:21:22 來源:億速云 閱讀:93 作者:iii 欄目:編程語言

這篇文章主要講解了“Hibernate和模型對象怎么理解”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Hibernate和模型對象怎么理解”吧!

學習Hibernate時,經常會遇到一些小問題,這里將介OSGi平臺的插件類加載機制使得Hibernate無法正確加載分布在不同插件內部的模型對象與O/R映射文件問題的解決方法。

OpenCore是在OSGi規范上構建的微內核(Microkenerl),基于純組件(Pure Plugin)開放源碼企業應用軟件平臺。

OpenCore數據層實現OSGi上集成Hibernate,Hibernate及其依賴庫作為一個單獨的插件,這樣帶來一個問題,就是OSGi平臺的插件類加載機制使得Hibernate無法正確加載分布在不同插件內部的模型對象與O/R映射文件。本文討論解決方案:

模型對象(Domain Objects)插件

模型對象(Domain Objects)集中到獨立的插件(Bundle)內,Hibernate插件依賴這些模型對象插件。這是最簡單的,也是比較糟糕的方式,比較小的基于OSGi的項目可以這也作做。

Eclipse-BuddyPolicy與Eclipse-RegisterBuddy方式

Equinox(Eclipse提供的OSGi實現)平臺特有的方式,允許插件(Bundle)聲明自己的伙伴,讓“伙伴插件”來動態加載本插件的類,這也是Hiberate與Equinox集成的官方解決方案。這種方式模型對象無需部署在單獨的插件內,與業務插件部署在一起即可,Hibernate插件也無須依賴模型對象。

具體做法如下:

首先,Hibernate插件(名稱,例如org.opengoss.orm.hibernate)聲明自身可以作為伙伴插件,自描述文件(MANIFEST.MF) 加入描述:Eclipse-BuddyPolicy: registered

然后,模型對象的業務插件中把Hibernate插件加入為伙伴,自描述文件(MANIFEST.MF) 加入描述:Eclipse-RegisterBuddy:org.opengoss.orm.hibernate

Eclipse Extension Point方式

這是我們目前實現的方式,通過標準的Eclipse擴展點與擴展機制,我們在Hibernate插件中plugin.xml配置文件中聲明下述擴展點,在模型對象插件中聲明擴展,例如:

Hibernate插件的啟動中,用代碼配置生成SessionFactory,代碼如下:

  1. public void start(BundleContext context) throws Exception {   

  2. Configuration configuration = new Configuration().configure
    (new File ("./etc/org.opengoss.database.hibernate/hibernate.cfg.xml"));   

  3. Class[] domainClasses = getDomainClasses();   

  4. for (Class domainClass : domainClasses) {   

  5. configuration.addClass(domainClass);   

  6. }   

  7. sessionFactory = configuration.buildSessionFactory();   

  8. Dictionarynew Hashtable props.put("scope", "APPLICATION");   

  9. props.put("uid", "Hibernate:SessionFactory");   

  10. registration = context.registerService
    (SessionFactory.class.getName(), sessionFactory, props);  

  11. }   

  12. private Class[] getDomainClasses() throws Exception {   

  13. List domainClasses = new ArrayList();   

  14. IExtensionPoint point = registry.getExtensionPoint
    (IConstants.DOMAIN_OBJECT_EXTENSION_POINT);   

  15. IExtension[] extensions = point.getExtensions();   

  16. for (IExtension extension : extensions) {  

  17. IConfigurationElement[] elements = extension.getConfigurationElements();   

  18. for (IConfigurationElement configurationElement : elements) {   

  19. Bundle bundle = pluginContext.getBundleBySymbolId
    (extension.getNamespaceIdentifier());   

  20. Class domainClass = bundle.loadClass
    (configurationElement.getAttribute("class"));   

  21. domainClasses.add(domainClass);   

  22. }   

  23. }   

  24. return domainClasses.toArray(new Class[domainClasses.size()]);   

  25. }  

注意:Hibernate內部的類加載機制實在無法令人滿意,盡管我們在這種方式中已經加載所有的模型類對象,但Hibernate內部仍然會調用Class.forName()去試圖加載。

感謝各位的閱讀,以上就是“Hibernate和模型對象怎么理解”的內容了,經過本文的學習后,相信大家對Hibernate和模型對象怎么理解這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

耒阳市| 灵武市| 彰化市| 威宁| 天水市| 衡阳市| 克什克腾旗| 石城县| 濮阳县| 阿勒泰市| 古丈县| 景泰县| 丰顺县| 运城市| 明水县| 安阳市| 昌乐县| 黑水县| 库车县| 新营市| 兰坪| 甘孜县| 哈密市| 兴安县| 淄博市| 漯河市| 兴和县| 东乌| 莱阳市| 武义县| 富平县| 常德市| 临西县| 会理县| 永清县| 濮阳市| 苗栗市| 敦化市| 贡觉县| 道真| 时尚|