如何扩展JPA Annotation以更好的支持OR Mapping - 编程入门网
如何扩展JPA Annotation以更好的支持OR Mapping(6)时间:2011-04-19 IBM 周蕾蕾 胡光辉 赵 成难道为了应用 SINGLE_TABLE 就不得不丢弃字段的约束条件么? @Required 就应运而生 了,定义如清单 10。@Required 被用来标记 p1,p2 不能为 null。 就需要在我们自己的程序里面检测 @Required,并对相应的属性值进行判断。这一步通常 可以放在 EntityListener 中的 PrePersist 这个回调(Callback)函数中进行检测。 清单 10. @Required 的定义
在 OnlineGame Class 中,可以通过如下清单 11 所示方式设置属性 ServiceProvider: 清单 11. 应用 @Required
数据库不再对 ServiceProvider 是否为空做出约束,但是通过实现标记为 @prePresist 的回调函数,函数中检测是否有 @Required,如果有 @Required,该字段就不能为空。如此 ServiceProvider 的约束条件就不会再成为约束类 PCGame 的条件。 @RelationshipMetaData 在 OpenJPA 中,有四个 Annotation 可以用来标识一个实体之间的关系,它们分别是: @OneToOne,@OneToMany,@ManyToOne 和 @ManyToMany。其中每一个 Annotation 都有以下 几个属性:targetEntity,mappedBy,cascade,fetch 和 optional。 图 2. 实体 Employee 和 SoftwareLicense 的 ER 图 如何扩展JPA Annotation以更好的支持OR Mapping(7)时间:2011-04-19 IBM 周蕾蕾 胡光辉 赵 成尽管包括了一对一、一对多和多对多的情况,但是为了将图 2 所示 ER 关系图映射到关 系数据库,以上的 Annotation 就不能满足要求。图 2 的关系 Owns 是一个多对多的关系, Owns 包括了两个属性 RequestDate 和 ExpiredDate,Owns 必须对应到一个实体类。类 Employee、SoftwareLicense 和 Owns 之间分别存在着多对一的关系,@ManytoOne 或者 @OnetoMany 虽然能够标识出关系,但是并不能标识出关系的源或者目的是一个实体还是关系 ,@RelationshipMetaData 就有了用武之地,其定义如清单 12 所示: 清单 12. @RelationshipMetaData 的定义
有了 @RelationshipMetaData,图 2 对应的实体就可以被定义为: 清单 13. 应用 @RelationshipMetaData 实现图 2 的 OR 映射
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |