您所在的位置: 首页>>开发>>JAVA>>JAVA专区>>热门框架>>EJB>>

利用EJB 3.0的JPA设计企业应用程序(3)

http://developer.51cto.com  2006-09-21 10:30  Borys Burnayev  IBM  我要评论(0)
  • 摘要:介绍 Java Platform, Enterprise Edition (Java EE 5) 的一种设计方法,它利用了Enterprise JavaBeans(EJB) 3.0 新的Java Persistence API (JPA)。
  • 标签:EJB  JPA  Java

域模型

您可以把JPA看作是众所周知的透明持久性技术(如JDO和Hibernate)的继承者。尽管透明持久性可看作一个附加(add-on)服务,可被应用到忽略持久性的Plain Old Java Objects (POJO)中,但JPA还是对域对象施加了少量限制。

首先,您通常要具有一个映射到对应数据库表主键的(代理)对象标识符:

@Id 
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "AccountSeq")
@Column(name = "account_sysid")
public Integer getAccountId() {
return this.accountId;
}

其次,在联机事务过程(OLTP)环境中,需要一个 version 字段或 JavaBean 属性以进行乐观并发控制:

@Column(name = "row_version") 
@Version
public int getVersion() {
return version;
}

最终,如果您选择使用注释方式的映射,映射注释将分布在代码周围。
 
另一种限制源自于这样一个事实:域对象可以通过由实体管理器所管理的域对象所在的层访问,也可以通过分离它的所有其他层访问。此外,对象可能是新的或已删除的。一般情况下,对象的行为取决于其持久性状态。例如,假设在实体管理器中执行以下这行代码:

int size = attachedProduct.getItems().size();

项集合使用给定产品的项填充,size变量的值大于0。如果使用默认懒加载(lazy)配置的一对多关联,并在表示层中执行同一行代码,size 变量的值为0。换句话说,在实体管理器之外(在实体管理器内也没关系)无法把非活动(lazy)对象与活动(eager)对象区分开。解决此问题的方法是强制执行项目规范和约定。

在域对象中,您可以把相同的推理应用到业务方法。无论是否在实体管理器中,它们都应该准备好在任何层中调用。这就是把域对象中的业务方法数量限制为必要的最少数量的理由。
虽然有上述各种情况,域对象依然保留许多POJO特性。这意味着您可以使用plain old Java test (POJT)对业务方法进行测试,POJT这一术语引自Expert One-on-One J2EE Development without EJB一书。

OR映射

OR 映射是围绕JPA设计的应用程序的重要元素。它直接影响实体管理器填充域对象的方式。因此,变更映射能够在表示层觉察到。变更获取类型或级联类型可能将产生非常不利的影响。


共5页: 上一页 [1] [2] 3 [4] [5] 下一页
【内容导航】
Java实用开发全集
Java类的基础教程专题
Java发展动态专题
Java编程开发手册
EJB应用开发专栏
 
 验证码: (点击刷新验证码)   匿名发表
  • 野蛮生长

  • 作者:冯仑著
  • “地产界的思想家”冯仑纵横生意江湖20年来,第一次系统梳理出书。  三十年来中国民营企业从前公司时代发展到公司时代,21..
Copyright©2005-2008 51CTO.COM 版权所有