将遗留Hibernate应用程序迁移到OpenJPA和EJB 3.0(二) - 编程入门网
取异常(在 OpenJPA 中不获 取),异常可以指示在测试过程中需要检测和修复的应用程序错误。也就是说,问题在于您是否获取异常 ,所以在 JPA 规范中强制引发异常与否不能解决问题:为了使用分离对象,应用程序需要某些体系结构 指导原则。
有以下三个解决方案使用分离对象: 在返回视图所需的所有集合之前,请显式初始化它们;即您应确定延迟加载是否适用于这些特定的关 系。 保持实体管理器处于打开状态,直到完成呈现视图(即在视图中打开和关闭实体管理器),这可以全 部避免使用分离实体。 与第二个解决方案类似,EJB 3.0 的第三个可能的解决方案使用扩展的持久上下文,以保持实体管理 器在事务之间处于活动状态。 如果将实体从 EJB 组件传递到 Web 层,则应遵循第一个解决方案,因为它使您能够保持 EJB(会话 facade)中的事务逻辑,而不是需要 Web 层管理该事务。此外,Web 层难于管理事务,因为它需要提交 事务,并在呈现视图后关闭实体管理器(可能在 ServletFilter 中)。 关于分离对象的最后一点是您应该让对象模型符合业务用例。如果某些用例需要集合的延迟加载,而 其他用例需要该集合的 eager 加载,则在对象模型中使用集合的延迟加载,并根据需要在会话 facade 中强制执行 eager 加载。即,在会话 facade 中为不同的用例定义不同的方法:一种方法仅返回分离对 象,而另一种方法加载子对象,然后返回分离的对象。共有三种方法可加载 OpenJPA 中的子对象;前两 种方法为 JPA 标准,最后一种方法为 OpenJPA 扩展: 将遗留Hibernate应用程序迁移到OpenJPA和EJB 3.0(二)(8)时间:2011-09-18 Donald Vines通过调用集合上的 size(),进行集合的 Trigger 加载。 将 JP-QL 与 Fetch Join 功能一起使用,临时覆盖 Lazy fetch 类型。 使用 OpenJPA FetchGroups 注释加载子对象。 4. 对象标识 数据模型中的所有表与表的主键一样包括称为 OID 的对象标识列。OID 的最佳实践是使用其值由系统 分配的整数列。在这种情况下,OID 使用 java.lang.Long 映射到对象模型的主键。同时,表(外键)之 间的所有关系也都基于关系表的 OID 列。 在使用通常的 Hibernate Sequence 生成器类插入任何新行时,Hibernate 会分配 ID,它使用基础数 据库支持序列,其中每个表都有一行包含表名称和当前 OID 号。在此方法中,OID 对每个表都是唯一的 (OID 在表之间可能不是唯一的)。 使用 OID 为没有业务含义的所有数据提供键。这些系统生成的键没有任何业务含义,被称为人工键, 而不是具有业务含义的自然键。使用人工键可以更改数据库中任何具有业务含义的数据,而不用担心违反 约束。 在现有 Hibernate 模型中,您通常还会发现大多数表具有可以包括许多列的具有业务含义的标识。您 可能还会发现在数据模型中的任何此类候选主键上定义了唯一约束。此数据库约束可确保唯一性,并且还 基于业务含义为查找此类实体提供索引。 您可能会遇到某些特殊情况,其中数据必须预填充到某些表,以表示没有任何业务含义的数据行(对 于代码表和类似内容)。为此,在启动应用程序之前,必须将这些行插入到数据库,这些行的 OID 必须 小于用于该表的 SEQUENCE 表的起始值。在这种情况下,您可能会发现初始值大于 1 的序列表。 对象模型 映射 22. 对象标识 (POJO)
Hibernate 约定 在 Hibernate 中,对象标识按照以下方式进行映射: 将 id 与嵌套生成器子元素一起使用。 映射 23. 对象标识(Hibernate XML 映射)
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |