域模型
您可以把JPA看作是众所周知的透明持久性技术(如JDO和Hibernate)的继承者。尽管透明持久性可看作一个附加(add-on)服务,可被应用到忽略持久性的Plain Old Java Objects (POJO)中,但JPA还是对域对象施加了少量限制。
首先,您通常要具有一个映射到对应数据库表主键的(代理)对象标识符:
@Id |
其次,在联机事务过程(OLTP)环境中,需要一个 version 字段或 JavaBean 属性以进行乐观并发控制:
@Column(name = "row_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] 下一页 | ||
|