快速业务通道

将遗留Hibernate应用程序迁移到OpenJPA和EJB 3.0(一) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
持久对象。

更新持久对象。

删除持久对象。

通常,这些场景会映射到单个用例操作,并使用分离的实体在独立的事务中执行,但是它们还可以与 连接的实体一起使用。

Hibernate 约定

在 Hibernate 中,实体管理按照以下方式进行映射:

使用 Session#save 使临时对象持久化。

使用 Session#load 检索持久对象。

使用 Session#update 更新分离对象的持久状态。(如果修改持久(连接)对象的状态,则不需要调 用更新;在调用 commit() 时,Hibernate 自动将更新传播到数据库。)

使用 Session#delete 使分离或持久对象成为临时对象。

将遗留Hibernate应用程序迁移到OpenJPA和EJB 3.0(一)(7)

时间:2011-09-18 Donald Vines

清单 7. Hibernate 实体管理

public class ORMHelper {   ...   public static void create(Serializable obj) {    getCurrentSession().save(obj);   }   public static Object retrieve (Class clz, Serializable key) {    return getCurrentSession().load(clz, key);   }   public static void update(Serializable obj ) {    getCurrentSession ().saveOrUpdate(obj);   }   public static void delete(Serializable obj ) {     getCurrentSession().delete(obj);   } }

OpenJPA 约定

在 OpenJPA 中,等效的实体管理按照以下方式进行映射:

使用 EntityManager#persist 创建持久实体。

使用 EntityManager#find 检索持久实体。

使用 EntityManager#merge 更新分离实体。(如果使用持久(连接)实体,则无需调用 merge; OpenJPA 将更新传播到事务末尾的数据库。)

使用 EntityManager#remove 删除分离的或持久实体。

清单 8. OpenJPA 实体管理

public class ORMHelper {   ...   public static void create( Serializable obj ) {    getCurrentSession().persist((Object) obj);   }   public static Object retrieve(Class clz, Serializable key) {    return getCurrentSession().find( clz, (Object) key );   }   public static Object update( Serializable obj ) {    return getCurrentSession().merge((Object) obj);   }   public static void delete( Serializable obj ) {    getCurrentSession().remove( (Object) obj);   } }

在本示例中,ORMHelper#update() 方法的签名已更改,因为 Hibernate update() 方法将新托管的持 久状态复制到传递给该方法的分离或(临时)对象,所以它没有返回值。相反,在 OpenJPA merge() 方 法中,原始的分离(临时)对象未更改,返回值包含新托管的持久状态。

除更改 ORMHelper#update 签名外,还必须更改调用该签名的遗留应用程序,以便将返回值显式分配 给原始的临时对象。

将遗留Hibernate应用程序迁移到OpenJPA和EJB 3.0(一)(8)

时间:2011-09-18 Donald Vines

6. 分离的实体

基于分层体系结构的 Hibernate 应用程序中另一个常见场景是,将无状态会话 EJB 用作会话 facade 来将“分离”实体返回给 Web 层。在此场景中,您将发现会话 EJB 启动和停止事务以响应来自 Web 层 的调用。

用于分层体系结构的这一模式的好处是,由于 EJB 层根据用户交互来启动和停止事务,因此在用户执 行某项工作时,事务从不保持打开状态。因此,所有事务的生存时间很短,应在数秒中完成。

大多数现有 Hibernate 应用程序使用 EJB 2.1 实现会话 EJB,而大多数 OpenJPA 应用程序则使用 EJB 3.0。您最初应使用资源本地实体管理器迁移到 EJB 3.0 会话 Bean,这样不需要对事务逻辑进行更 改,但您还可以从 EJB 2.1 会话 Bean 使用 OpenJPA(请参见 通过 WebSphere Application Server V

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号