`
fireflylover
  • 浏览: 111800 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

Hibernate自定义表单完全解决方案(无需重置SessionFactory) (二)

阅读更多

然后就是准备模板了,首先声明

Html代码 

 

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <hibernate-mapping>  
  5.     <class name="${entity.className}" table="${entity.tableName}">  
  6.         <#if entity.properties?exists>  
  7.             <#list entity.properties as property>  
  8.                 <#if property.primary>  
  9.                     <id name="${property.name}" type="${property.type}">  
  10.                 <#else>  
  11.                     <property name="${property.name}" type="${property.type}">  
  12.                 </#if>  
  13.                 <#if property.type=="java.lang.String">  
  14.                     <column name="${property.field?upper_case}" <#if property.length?exists>length="${property.length}"</#if>></column>  
  15.                 <#elseif property.type=="java.util.Date">  
  16.                         <column name="${property.field?upper_case}" length=7></column>  
  17.                 <#elseif property.type=="java.lang.Long" || property.type=="java.lang.Integer"  
  18.                     || property.type=="java.lang.Short">  
  19.                         <column name="${property.field?upper_case}" <#if property.length?exists>precision="${property.length}"</#if> scale="0"></column>  
  20.                 </#if>  
  21.                 <#if property.primary==true>  
  22.                     <#if property.sequence?exists>  
  23.                         <generator class="sequence">  
  24.                             <param name="sequence">${property.sequence}</param>  
  25.                         </generator>  
  26.                     </#if>  
  27.                     </id>  
  28.                 <#else>  
  29.                     </property>  
  30.                 </#if>  
  31.             </#list>  
  32.         </#if>  
  33.     </class>  
  34. </hibernate-mapping>  

 

4 注册 
首先是对生成的hbm.xml的注册,比如,我获取倒Hibernate的一个config以后 

 

 

 

 然后就是要通知sessionFactory,新增了持久类,目前很多方法都是重启sessionfactory,就是关闭当前 sessionFactory ,然后根据config build一个新的sessionFactory出来,但是,这种情况感觉总不那么完美,虽然这个过程持续不到多长时间,但用户每增一个表就close然后build一个,单说用户体验,人家正在提交数据了,你把这个给close了.... 
但目前hibernate包的 sessionFactory 确实没提供这种对持久类的add支持,XX伟人说过:没有条件 创造条件也要上,于是乎,拿起你的键盘,启动 editplus,向hibernate3的源码砍去。。

Java代码

  1. 一是,改动Configuration,三句话  
  2.     public Mapping getMapping()  
  3.     {  
  4.         return this.mapping;  
  5.     }  

 然后是SessionFactoryImpl 我们要让他知道,这个世界上还存在很多未知的来客,需要你去主动了解。。。。 
增加代码

 

  1. public void addPersistentClass(PersistentClass model,Mapping mapping)  
  2. {  
  3.     if ( !model.isInherited() ) {  
  4.         IdentifierGenerator generator = model.getIdentifier().createIdentifierGenerator(  
  5.                 settings.getDialect(),  
  6.                 settings.getDefaultCatalogName(),  
  7.                 settings.getDefaultSchemaName(),  
  8.                 (RootClass) model  
  9.         );  
  10.         if (!identifierGenerators.containsKey(model.getEntityName()))  
  11.             identifierGenerators.put( model.getEntityName(), generator );  
  12.     }  
  13.       
  14.     model.prepareTemporaryTables( mapping, settings.getDialect() );  
  15.     String cacheRegion = model.getRootClass().getCacheRegionName();  
  16.   
  17.     CacheConcurrencyStrategy cache = CacheFactory.createCache(  
  18.                 model.getCacheConcurrencyStrategy(),  
  19.                 cacheRegion,  
  20.                 model.isMutable(),  
  21.                 settings,  
  22.                 properties  
  23.             );  
  24.     if (cache!=null)  
  25.         allCacheRegions.put( cache.getRegionName(), cache.getCache() );  
  26.           
  27.       
  28.     EntityPersister cp = PersisterFactory.createClassPersister(model, cache, this, mapping);  
  29.     if ( cache != null && cache.getCache() instanceof OptimisticCache ) {  
  30.         ( ( OptimisticCache ) cache.getCache() ).setSource( cp );  
  31.     }  
  32.     entityPersisters.put( model.getEntityName(), cp );  
  33. }  

 

最后遗留的是hbm.xml在cfg.xml的注册,以保证系统重启后可以顺利加载新增的持久化配置

 

  1. /** 
  2.  * 把hbm.xml的路径加入到cfg.xml的mapping结点 
  3.  * 
  4.  * @param cfg.xml的路径 
  5.  * @param hbm.xml的路径 
  6.  */  
  7. public static void updateHbmCfg(URL url,String hbm)  
  8. {  
  9.     try  
  10.     {  
  11.         SAXReader reader = new SAXReader();  
  12.         Document doc = reader.read(url);  
  13.         Element element = (Element)doc.getRootElement()  
  14.         .selectSingleNode("session-factory");  
  15.           
  16.         Element hbmnode = element.addElement("mapping");  
  17.         hbmnode.addAttribute("resource", hbm);  
  18.         String filepath = url.getFile();  
  19.         if (filepath.charAt(0)=='/')  
  20.             filepath = filepath.substring(1);  
  21.         FileOutputStream outputstream = new FileOutputStream(filepath);  
  22.         XMLWriter writer = new XMLWriter(outputstream);  
  23.         writer.write(doc);  
  24.         outputstream.close();  
  25.     }  
  26.     catch (Exception e)  
  27.     {  
  28.         e.printStackTrace();  
  29.     }  
  30. }  

 

分享到:
评论

相关推荐

    spring+struts+Hibernate面试题

    - **利用 Struts 提供的工具类**:例如使用 `ActionForm` 的 `reset()` 方法来重置表单数据,确保每个请求都有干净的数据。 - **结论**:在 Struts 1 中,由于 Action 是单例模式的,所以默认情况下它是不线程安全...

    用SSH2实现简单的用户登录注册删除功能.docx

    `&lt;s:textfield&gt;`和`s:password`标签用于创建表单字段,`&lt;s:submit&gt;`和&lt;s:reset&gt;`定义了提交和重置按钮。`&lt;s:actionerror&gt;`和`s:actionmessage`用于显示Action类中设置的错误和消息,这对于用户交互和验证非常重要。 ...

    SSH框架面试题.pdf

    Hibernate提供了三级缓存机制:一级缓存(Session级别的缓存)、二级缓存(SessionFactory级别的缓存)和查询缓存。这些缓存机制提高了应用程序的性能,减少了不必要的数据库访问。 15. **解释Hibernate的映射文件...

    [AB PLC例程源码][MMS_044666]Translation N-A.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    kolesar_3cd_01_0716.pdf

    kolesar_3cd_01_0716

    latchman_01_0108.pdf

    latchman_01_0108

    matlab程序代码项目案例:matlab程序代码项目案例MPC在美国高速公路场景中移动的车辆上的实现.zip

    matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    pimpinella_3cd_01_0716.pdf

    pimpinella_3cd_01_0716

    petrilla_01_0308.pdf

    petrilla_01_0308

    [AB PLC例程源码][MMS_041452]Speed Controls in Plastic Extrusion.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    强化学习驱动下DeepSeek技术创新及其对AI发展的影响

    内容概要:本文档由张卓老师讲解,重点探讨DeepSeek的技术革新及强化学习对未来AI发展的重要性。文章回顾了AI的历史与发展阶段,详细解析Transformer架构在AI上半场所起到的作用,深入介绍了MoE混合专家以及MLA低秩注意机制等技术特点如何帮助DeepSeek在AI中场建立优势,并探讨了当前强化学习的挑战和边界。文档不仅提及AlphaGo和小游戏等成功案例来说明强化学习的强大力量,还提出了关于未来人工通用智能(AGI)的展望,特别是如何利用强化学习提升现有LLMs的能力和性能。 适用人群:本资料适宜对深度学习感兴趣的研究人员、开发者以及想要深入了解人工智能最新进展的专业人士。 使用场景及目标:通过了解最新的AI技术和前沿概念,在实际工作中能够运用更先进的工具和技术解决问题。同时为那些寻求职业转型或者学术深造的人提供了宝贵的参考。 其他说明:文中提到了许多具体的例子和技术细节,如DeepSeek的技术特色、RL的理论背景等等,有助于加深读者对于现代AI系统的理解和认识。

    有师傅小程序开源版v2.4.14+前端.zip

    有师傅小程序开源版v2.4.14 新增报价短信奉告 优化部分细节

    [AB PLC例程源码][MMS_047333]Motor Sequence Starter with timers to start.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    商城二级三级分销系统(小程序+后台含源码).zip

    商城二级三级分销系统(小程序+后台含源码).zip

    li_3ck_01b_0918.pdf

    li_3ck_01b_0918

    nicholl_3cd_01_0516.pdf

    nicholl_3cd_01_0516

    1995-2022年 网络媒体关注度、报刊媒体关注度与媒体监督相关数据.zip

    媒体关注度是一个衡量公众对某个事件、话题或个体关注程度的重要指标。它主要反映了新闻媒体、社交媒体、博客等对于某一事件、话题或个体的报道和讨论程度。 媒体监督的J-F系数(Janis-Fadner系数)是一种用于测量媒体关注度的指标,特别是用于评估媒体对企业、事件或话题的监督力度。J-F系数基于媒体报道的正面和负面内容来计算,从而为公众、研究者或企业提供一个量化工具,以了解媒体对其关注的方向和强度。 本数据含原始数据、参考文献、代码do文件、最终结果。参考文献中JF系数计算公式。 指标 代码、年份、标题出现该公司的新闻总数、内容出现该公司的新闻总数、正面新闻数全部、中性新闻数全部、负面新闻数全部、正面新闻数原创、中性新闻数原创、负面新闻数原创,媒体监督JF系数。

    [AB PLC例程源码][MMS_040315]Double INC and Double DEC of INT datatype.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_047773]Convert Feet to Millimeters.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_042349]How to read-write data to-from a PLC using OPC in Visual Basic 6.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

Global site tag (gtag.js) - Google Analytics