`
andney
  • 浏览: 2494 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

Hibernate3 Migration Guide (翻译)

阅读更多
:D 这是本人第一次发表文章,翻译水平有限,难免谬误重重,望各位读者不吝赐教。 
zhaohj@ultrapower.com.cn

源文:http://www.hibernate.org/Documentation/Hibernate3MigrationGuide#A7

Hibernate 3.0 不完全兼容 Hibernate 2.1, 并且不是各简单的替代2.1. 相反, 对于改进后的3.0是切切实实的把code 和 metadata 都大大的改变了,如果没有太多的经验的话,移植到3.0会遇到许多意想不到的结果与困难。
本文简单的说明了Hibernate 2.1 与 Hibernate 3.0的不同; Hibernate 3.0有一些新的改进细节对于现有程序的改进会有很大的帮助。
改进列表如下:(Hibernate 2.1 和 Hibernate 3.0在同一个程序中能共存)

• API Changes
o Package naming
o org.hibernate.classic package
o Dependencies
o Exception model
o Session interface
o createSQLQuery()
o Lifecycle and Validatable interfaces
o Interceptor interface
o UserType and CompositeUserType interfaces
o FetchMode
o PersistentEnum
o Blob and Clob support
o Changes to extension APIs
• Metadata Changes
o Association fetching strategies
o Identifier mappings
o Collection mappings
o DTD• Query Language Changes
o indices() and elements() functions
• BEA Weblogic issues(没使用过,所以没有发言权无后续部分)
 
API Changes

Package naming
对于 Hibernate3 包结构已由net.sf.hibernate变为  org.hibernate.在导入包中首先要改变这一处。
net.sf.hibernate.expression ----》org.hibernate.criterion.在程序中用Criteria queries需要一个further text/search来适应它。
在使用IDE时 对于EHCache你需要加倍注意(它在程序中的引用是否是Hibernate packages 下的org.hibernate.cache.EhCacheProvider)
org.hibernate.classic package在它下的一些接口已经提倡了,现已改到org.hibernate.classic包下了;

Dependencies
你需要查看第三方库文件在lib/README.txt,看看哪些是已更新,哪些是是必需的。
Session interface
在org.hibernate.Session interface中,一些多余的方法已经被抛弃了. 然而,为了移植方便,有些方法还是暂时保留了下来如:
• 查询: find(), iterate(), filter(), delete()
• saveOrUpdateCopy()
由些看来classic也不是长久之策,以Gavin的观点,所有的query操作都应该由createQuery()实现才是标准。

createSQLQuery()
重载后的createSQLQuery()已经移到org.hibernate.classic.Session. 新的 SQLQuery接口比以前的功能实现多一些。不过对于已存的程序代码可以继续用前一点所说的方法。

Lifecycle and Validatable interfaces

The Lifecycle and Validatable 接口已经不提倡,并且已经移到了 org.hibernate.classic 包下. Hibernate3开发团队认为域模型不应依靠 persistence-specific APIs. Hibernate3 程序应该用拦截器或者新建一个事件框架.对于已存程序代码可以继续使用之,暂时没有性命之忧。

Interceptor interface
新增了两个方法, 已有的 interceptors代码需要更新实现. instantiate()已经由类对象改为取一个字符值的实体名。 isUnsaved()方法已改为isTransient().
UserType and CompositeUserType interfaces
它们都增加了一些方法实现来支持Hibernate3. 它们移到org.hibernate.usertype包下.已存代码需要更新实现

Note: Hibernate3 提供了一个 ParameterizedType 接口允许更好的重用 user type 实现.

FetchMode

FetchMode.LAZY 和 FetchMode.EAGER 被 deprecated. 替代方法是 FetchMode.SELECT 和FetchMode

PersistentEnum
不提倡使用的PersistentEnum重获新生,已有程序可以用UserType 来处理persistent enumerated 类型了啦.
Blob and Clob support
Hibernate 包裹了它俩的实例,以便允许含有此类型的类可以被 detached, serialized, deserialized, and passed to merge(). 相反,它不能转换厂商指定的type (eg. oracle.sql.CLOB). 你需要用 getWrappedClob() 或者getWrappedBlob() 方法:
clob = (oracle.sql.CLOB) ( (org.hibernate.lob.SerializableClob) foo.getText() ).getWrappedClob();
我们期待Oracle整理JDBC driver, 可以不用以上方法。

Changes to extension APIs
对于org.hibernate.criterion, org.hibernate.mapping, org.hibernate.persister, org.hibernate.collection 需要大量的重构工作. 大多数的 Hibernate 2.1 程序没有使用以上的这些包,将来也不会用(最好),如果你的程序中含有此类引用,那你就死定了,你可能要小心再小心地移植。

Metadata Changes

Association fetching strategies以前实现映射所需的类和集合用lazy="true", 现在它的默认值是"lazy="true"".如果你还是怀念H2中的一次性load出PO而不是proxy,那么在hbm文件中的class 中声明lazy="false"即可.
对于 outer-join attribute 已经 deprecated.用 fetch="join" 和 fetch="select" 替代 outer-join="true" 和outer-join="false". 现有程序可以继续用以前的方法。

*****[swf width= height=]关于Lazy问题在Hibernate官方论坛的帖子[/swf] *****
http://forum.hibernate.org/viewtopic.php?t=939532&postdays=0&postorder=asc&start=0

Identifier mappings

对于unsaved-value attribute 现在是可选的了,大多数情况下Hibernate会用它的默认值是unsaved-value="0"; 是合情合理的。
Note: In Hibernate3, 不需要继承Interceptor.isUnsaved()当detached对象或用普通键;当对象是新的或detached的情况下Hibernate会终止查询数据库. 然而, 用Interceptor.isUnsaved() 会引起高开销,直到避免数据库查询。
Collection mappings
对于 <index>元素已是半deprecated, <list-index> 和 <map-key> 为首选. <map-key-many-to-many> 优于<key-many-to-many>. <composite-map-key> 优于<composite-index>.

DTD

更新你的 hbm XML files. http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd to http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd 在 DOCTYPE中.
Query Language Changes
Hibernate3 已经是一个全新的基于ANTLR(ANother Tool for Language Recognition(它让你能够用一个文本文件来描述自己的语言。如果你把ANTLR指向这个文件,那么它将生成一个能够处理你新语言的词法分析器(Lexer)和解释器。词法分析器会把字符翻译成为语言符号,而解释器则利用这些符号来完成任务。一旦ANTLR为你的微型语言生成了这些类,你就可以把它们用在自己的应用程序里来操控系统了)) HQL/SQL query translator了. 但是, Hibernate 2.1 query parser 还可以继续使用,在Hibernate属性设置hibernate.query.factory_classk中是可选的。可能的值: org.hibernate.hql.ast.ASTQueryTranslatorFactory, 对于新的query parser,然而对于先前的则使用 org.hibernate.hql.classic.ClassicQueryTranslatorFactory.但是,现有的程序只能用先前的query parser在移植过来时.而不能用新的query parser。

在Hibernate 1.x 中语法 "from f in class bar.Foo" 是不允许的,用 "from bar.Foo as f" 或"from bar.Foo f".
注意: 有一个已知的bug 波及了dialects with theta-style outer joins (eg. OracleDialect for Oracle 8i, TimesTen dialect, Sybase11Dialect).试图使dialect 支持 ANSI-style joins (eg. Oracle9Dialect),(如果你经历过这个问题的话)会退到先前的query parser
indices() and elements() functions
对于indices()和elements()它们以后会很少再出现了(因为语义关系会引起用户的歧义,越来越糊涂),但是它们还会用在where()这种地方. (Use an explicit join instead of select elements(...))。
总体过程如下:
1. 在项目的conf中修改两个文件hibernate.cfg.xml,hibernate.properties(最重要了,结合上文所说的修改,是一个反复运行的过程)
2. 在项目的lib中增加H3包下的几个Jar,如cglib、asm等,我做的是替换了Hibernate3.0其它的jar和上一个版本的jar共存。(如果去掉旧jar,程序会报导入出错,原因是两个版本之间的类path不一致)
3. 程序LIB包需要重导
4. 程序中的hbm.xml文件的DTD需要全部修改,否则程序会运行的像上了年纪的586 。
分享到:
评论

相关推荐

    Hibernate ORM 5.3.7.Final User Guide

    3. 启动和引导(Bootstrap):这里介绍如何开始使用Hibernate,包括配置和初始化过程。 4. 数据库模式生成(Schema Generation):Hibernate提供了一些工具来根据实体类自动生成数据库模式。 5. 持久化上下文...

    jbpm修改后的jar包

    (DTDEntityResolver.java:73) - recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!...

    hibernate 5.0.9.Final

    In addition, the 5.0 Migration Guide has been updated to document migration issues when moving from earlier 5.0 releases to 5.0.8. For information on consuming the release via your favorite ...

    SSO单点登录概要设计说明书.doc

    SSO单点登录概要设计说明书.doc

    奥塔北煤矿6.0 Mta新井设计说明书.docx

    奥塔北煤矿6.0 Mta新井设计说明书.docx

    基于S7-200 PLC和组态王的喷泉控制系统设计与实现

    内容概要:本文详细介绍了基于S7-200 PLC和组态王软件构建喷泉控制系统的全过程。首先明确了系统的IO分配,包括启动按钮、停止按钮以及喷泉水泵的连接方式。接着展示了梯形图程序的设计,涵盖了基本的启停控制逻辑、定时循环和模式切换机制。随后提供了详细的接线图原理图,解释了输入输出部分的具体接线方法。最后讲述了组态王的画面设计,包括创建工程、定义变量和绘制监控界面等步骤。此外还分享了一些调试过程中遇到的问题及解决方案。 适合人群:对自动化控制感兴趣的初学者和技术人员,尤其是那些希望深入了解PLC编程和人机界面设计的人群。 使用场景及目标:适用于小型喷泉项目的实际控制系统开发,旨在帮助读者掌握PLC编程技巧、熟悉组态软件的应用,并能够独立完成类似的自动化控制系统设计。 其他说明:文中不仅包含了理论知识讲解,还附带了许多实践经验分享,如硬件配置建议、常见错误规避措施等,有助于提高实际操作能力。

    计算机二级PPT精选二十套(标红).jpg

    计算机二级PPT精选二十套(标红)

    保险公司IT变更管理流程设计说明书.doc.doc

    保险公司IT变更管理流程设计说明书.doc.doc

    毕业设计说明书A江坝后式厂房双曲拱坝设计.pdf

    毕业设计说明书A江坝后式厂房双曲拱坝设计.pdf

    《计算机二级MS精选300道选择题.docx》

    内容概要:文档《计算机二级MS精选300道选择题.docx》涵盖了计算机二级考试中Microsoft Office软件(Word、Excel、PowerPoint)及计算机基础知识的选择题。题目涉及软件操作技巧、功能应用、常见问题解决等方面,旨在帮助考生熟悉并掌握相关知识点,提高应试能力。文档内容详尽,涵盖面广,从基础操作到高级应用均有涉及,适合考生全面复习备考。 适用人群:准备参加计算机二级考试的学生及相关从业人员,特别是需要强化Office软件操作技能和计算机基础知识的人员。 使用场景及目标:①考生可以在复习过程中使用这些选择题进行自我检测,巩固所学知识;②教师可以将其作为教学辅助材料,帮助学生更好地理解和掌握课程内容;③培训机构可以用这些题目作为测试题库,评估学员的学习效果。 其他说明:文档不仅提供了大量的选择题,还详细解析了每道题目的答案,有助于考生深入理解知识点。此外,题目内容紧跟最新考试大纲,确保考生能够获得最有效的备考资料。

    基于多目标黏菌优化算法(MOSMA)的SVM参数优化及其在回归预测中的应用

    内容概要:本文介绍了一种创新的方法,利用多目标黏菌优化算法(MOSMA)来优化支持向量机(SVM)的参数C和gamma,从而提高回归预测的效果。首先详细解释了MOSMA的工作原理,包括黏菌权重更新、快速非支配排序以及自适应参数调整等关键技术点。接着展示了具体的Python代码实现,涵盖数据预处理、适应度函数定义、参数更新规则等方面。实验结果显示,在风电功率预测等多个应用场景中,相较于传统的网格搜索方法,MOSMA能够更快更有效地找到最优参数组合,显著提升了预测性能。 适合人群:从事机器学习研究或应用开发的技术人员,尤其是关注SVM参数优化及回归预测领域的从业者。 使用场景及目标:适用于需要进行高效参数寻优的回归预测任务,如风电功率预测、设备负载预测等。主要目标是通过改进SVM参数配置,获得更高的预测精度和更好的泛化能力。 其他说明:文中提供了完整的代码示例和详细的实施步骤指导,帮助读者快速理解和应用这一先进的优化技术。此外,还讨论了一些常见的注意事项和技术细节,如数据标准化、参数范围设定、并行化改造等。

    毕业设计 某油库设计说明书.pdf

    毕业设计 某油库设计说明书.pdf

    Q235钢板焊接工艺设计说明书.docx

    Q235钢板焊接工艺设计说明书.docx

    75t循环流化床锅炉设计说明书.doc

    75t循环流化床锅炉设计说明书.doc

    (最新修订版)直列四缸柴油机配气机构设计毕业论文设计说明书.doc

    (最新修订版)直列四缸柴油机配气机构设计毕业论文设计说明书.doc

    DeepSeek大模型生态报告:中国AI技术突破及其全球影响分析

    内容概要:《deepseek大模型生态报告 2025年2月》详细介绍了DeepSeek大模型的背景、应用现状、技术特点及其产业生态。DeepSeek由杭州深度求索公司创立,通过一系列技术创新,如多层注意力架构(MLA)、FP8混合精度训练框架、DualPipe跨节点通信等,显著降低了训练成本和提高了模型性能。DeepSeek在国内和国际市场迅速崛起,登顶苹果应用商店免费APP下载排行榜,并被多家企业和机构接入,包括华为、三大运营商、微软、英伟达等。其开源策略和低成本优势对全球科技供应链和资本市场产生了深远影响,尤其是在AI领域。 适合人群:对人工智能、大模型技术感兴趣的科技爱好者、研究人员、企业家及政策制定者。 使用场景及目标:①了解DeepSeek大模型的技术创新和应用现状;②探讨DeepSeek对全球AI产业生态的影响;③分析DeepSeek在不同行业(如金融、医疗、教育、制造等)的具体应用案例。 其他说明:报告还涵盖了各国政府及相关机构对DeepSeek的态度和政策回应,以及DeepSeek对未来AI技术发展和国际竞争格局的启示。此外,报告深入剖析了DeepSeek在技术架构、数据策略和工程实践方面的突破,揭示了其成功背后的组织文化和创新机制。

    基于粒子群算法的电动汽车区域综合能源系统三方定价优化研究

    内容概要:本文详细介绍了利用粒子群算法解决电动汽车区域综合能源系统中光伏电站、充电桩运营商和电网公司在定价上的三方博弈问题。通过MATLAB代码实现了粒子群算法的具体应用,包括参数设置、适应度函数设计、粒子更新策略以及结果可视化。文中展示了如何将三方定价变量编码成多维粒子,并通过目标函数计算和约束处理确保粒子在合理的解空间内搜索最优解。最终得到的电价曲线反映了不同时间段内的供需变化,验证了算法的有效性和实用性。 适合人群:从事能源系统优化、智能算法应用的研究人员和技术开发者。 使用场景及目标:适用于需要进行能源系统优化调度的场景,特别是涉及多方利益协调的问题。目标是找到光伏电价、充电桩电价和电网电价的最佳组合,使得三方利益达到最优平衡。 其他说明:建议在调试过程中关注特定时段的电价突变,适当调整参数如社会认知系数和社会学习因子,以获得更好的收敛效果。此外,初始粒子的位置选择对收敛速度有很大影响,推荐采用高斯扰动等方法进行初始化。

    WY02锥齿轮的加工工艺规程及工时定额计算 课程设计说明书.docx

    WY02锥齿轮的加工工艺规程及工时定额计算 课程设计说明书.docx

    项目管理制度范文.docx

    项目管理制度范文.docx

    风电工程技术:DFIG双馈风力发电机仿真模型解析与应用

    内容概要:本文深入探讨了双馈风力发电机(DFIG)的仿真建模及其关键技术模块。首先介绍了最大功率跟踪(MPPT)模块的工作原理,利用爬山算法优化风能利用率。接着详细讲解了转子侧变流器的矢量控制,包括坐标变换、PI调节器参数设定以及抗饱和处理。文中还讨论了网侧变流器的直流电压控制方法,强调了双闭环结构的重要性,并分享了低电压穿越仿真的实践经验。此外,文章详细解释了功率解耦控制和变速恒频实现的技术细节,提供了丰富的故障案例和调试技巧。 适合人群:从事风电工程研究和技术开发的专业人士,尤其是对DFIG仿真建模感兴趣的工程师和研究人员。 使用场景及目标:适用于希望深入了解DFIG内部机制的研究人员,帮助他们掌握从基本原理到复杂控制策略的设计与实现。同时,也为实际工程项目提供宝贵的调试经验和故障排除指南。 其他说明:文章不仅涵盖了理论分析,还包括大量实用的代码片段和具体的参数配置建议,确保读者能够顺利构建并运行仿真模型。

Global site tag (gtag.js) - Google Analytics