中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

平顶山市| 南和县| 谷城县| 新疆| 武鸣县| 涿鹿县| 威信县| 肇源县| 本溪| 辽宁省| 邹平县| 夏河县| 公主岭市| 平定县| 关岭| 贡觉县| 青岛市| 乌拉特后旗| 方城县| 托克托县| 洛隆县| 浦北县| 陵川县| 曲松县| 玉田县| 龙海市| 博白县| 伊通| 汉沽区| 阆中市| 南宁市| 中江县| 云龙县| 商洛市| 本溪| 澳门| 裕民县| 平遥县| 开原市| 彩票| 新和县|