123
返回列表 发新帖
楼主: jieforest

扩展JPA注释

[复制链接]
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
21#
 楼主| 发表于 2010-1-30 23:58 | 只看该作者
尽管包括了一对一、一对多和多对多的情况,但是为了将图 2 所示 ER 关系图映射到关系数据库,以上的 Annotation 就不能满足要求。图 2 的关系 Owns 是一个多对多的关系,Owns 包括了两个属性 RequestDate 和 ExpiredDate,Owns 必须对应到一个实体类。类 Employee、SoftwareLicense 和 Owns 之间分别存在着多对一的关系,@ManytoOne 或者 @OnetoMany 虽然能够标识出关系,但是并不能标识出关系的源或者目的是一个实体还是关系,@RelationshipMetaData 就有了用武之地,其定义如清单 12 所示:

清单 12. @RelationshipMetaData 的定义                               
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface RelationshipMetaData {
    boolean isSource();
    boolean isManyToManyWithProperties();
}

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
22#
 楼主| 发表于 2010-1-30 23:58 | 只看该作者
有了 @RelationshipMetaData,图 2 对应的实体就可以被定义为:

清单 13. 应用 @RelationshipMetaData 实现图 2 的 OR 映射                               
@Table(name="Employee")
@Entity(name="Employee")
public class Employee {
    …
    @RelationshipMetaData(isSource=true,isManyToManyWithProperties=true)
    @OneToMany(mappedBy=”Source”)
    private java.util.Collection<Employee_owns_SoftwareLicense> owns_SoftwareLicense;
    …
};

@Table(name="SoftwareLicense")
@Entity(name="SoftwareLicense")
public class SoftwareLicense{
    …
    @RelationshipMetaData(isSource=false,isManyToManyWithProperties=true)
    @OneToMany(mappedBy=”Target”)
    private java.util.Collection<Employee_owns_SoftwareLicense> Employee_owns;
    …
}

@Table(name=" Employee_owns_SoftwareLicense ")
@Entity(name=" Employee_owns_SoftwareLicense ")
public class Employee_owns_SoftwareLicense{
    …
    @ManyToOne
    private Employee Source;
   
    @ManyToOne
    private SoftwareLicense Target;
    …
}

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
23#
 楼主| 发表于 2010-1-30 23:58 | 只看该作者
总结

本文首先介绍了 JPA 和 Apache OpenJPA,以及它们在将面向对象的实体映射为关系数据库表项 (OR Mapping) 方面的应用。然后介绍了 JPA 提供的标准 Annotations, 并且举例介绍了其用途。但实践表明已有的 annotation 常常不能满足需求,结合笔者的经验,一些扩展的常用的 annotation 以更好的满足 OR Mapping 的需求。通过提供自定义的 annotation,不仅弥补了目前 OpenJPA 提供的标准 annotation 的功能缺陷,而且提升了用户对 OR Mapping 过程的自适应调节和更灵活的控制,对于满足有特殊 OR Mapping 需求的开发具有非常实用的价值。

使用道具 举报

回复
论坛徽章:
131
乌索普
日期:2017-09-26 13:06:30马上加薪
日期:2014-11-22 01:34:242014年世界杯参赛球队: 尼日利亚
日期:2014-06-17 15:23:23马上有对象
日期:2014-05-11 19:35:172014年新春福章
日期:2014-04-04 16:16:58马上有对象
日期:2014-03-08 16:50:54马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
24#
发表于 2010-1-30 23:59 | 只看该作者
nice job

使用道具 举报

回复
论坛徽章:
131
乌索普
日期:2017-09-26 13:06:30马上加薪
日期:2014-11-22 01:34:242014年世界杯参赛球队: 尼日利亚
日期:2014-06-17 15:23:23马上有对象
日期:2014-05-11 19:35:172014年新春福章
日期:2014-04-04 16:16:58马上有对象
日期:2014-03-08 16:50:54马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
25#
发表于 2010-1-31 00:00 | 只看该作者
nice job

使用道具 举报

回复
论坛徽章:
131
乌索普
日期:2017-09-26 13:06:30马上加薪
日期:2014-11-22 01:34:242014年世界杯参赛球队: 尼日利亚
日期:2014-06-17 15:23:23马上有对象
日期:2014-05-11 19:35:172014年新春福章
日期:2014-04-04 16:16:58马上有对象
日期:2014-03-08 16:50:54马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
26#
发表于 2010-1-31 00:00 | 只看该作者
nice job

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表