`
tigers20010
  • 浏览: 48627 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

2010-01-20 传智播客—JPA与EJB (转载)

    博客分类:
  • JPA
阅读更多

今天内容为两个版块JPAEJB,从学习hibernateUMLJPA。他们都涉及到一个极为重要的细节——类与类、接口与接口或类与接口之间的四类关联关系。今日上午到下午3点左右内容为JPA中处理这四类关系。我想我应该将他们系统的做一下总结,这项任务就留着后天休息来完成吧!

近三天的课程内容除了带给我知识上的获取和见识的增长,更让我感觉到一种力量!在学习WEB之前,这些互联网的东西让我满头雾水,不知所云。但在传智播客学习到现在,WEB应用中应该没什么还能让我满头雾水的了,云计算也没之前那么让我感到神秘的。带给我什么力量了?一种驾驭知识的力量!我十分有兴与两位高手租房子,我从他们身上学习到了很多知识。因为我没读过本科,所以计算机基础知识不够好。偶有时间,看一看计算机组成原理等。通过与同学的交流,我似乎已经能摸清硬件了执行原理,并不复杂。

通过以前的工作自己掌握的知识、在传智播客学习到的知识,以及与同事、好友、同学们的相处。我似乎已经感觉到将硬件、桌面应用、WEB应用...融汇贯通的感觉!这感觉让我充满力量。

一、JPA中的关联关系

说实在的在学习hibernateUML时,听着老师讲关联关系一点问题都没有。但他们在我脑子里没形成系统的概念。但今天学习JPA的关联关系,让我找到了感觉。关系关联在我脑子里形成系统的概念,指日可待!

1.一对多单向关联

典型的例子是,客户与订单这种一对多的关系。在客户类的orders属性或getOrders属性方法上添加注解:

@OneToMany(fetch=FetchType.EAGER,

   cascade={CascadeType.PERSIST,CascadeType.REMOVE},

   targetEntity=Order.class)

@OneToMany”表示一对多关联关系的注解,括号内全是他的属性。

fetch=FetchType.EAGER”,强迫左外连接,默认值为“LAZY”。

cascade={CascadeType.PERSIST,CascadeType.REMOVE}”,设置保存和删除级联。

targetEntity=Order.class”,相当于hibernateclass属性。

2.多对一单向关联

订单与客户的例子。在订单类的customer属性或getCustomer属性方法上添加注解:

@ManyToOne(cascade={CascadeType.PERSIST})

@JoinColumn(name="cid")

@ManyToOne”表示多对一的关联关系的注解,括号内全是他的属性。

cascade={CascadeType.PERSIST}”设置保存级联。

@JoinColumn”设置Orders表的外键。

name="cid"”外键的名称。

3.一对多(多对一)双向关联

在客户类的orders属性或getOrders属性方法上添加注解:

@OneToMany(mappedBy="customer",

   fetch=FetchType.EAGER,

   cascade={CascadeType.PERSIST,CascadeType.REMOVE},

   targetEntity=Order.class)

在订单类的customer属性或getCustomer属性方法上添加注解:

在上面的注解中只“@OneToMany”中多了一个“mappedBy="customer"”属性,它相当于hibernate的“inverse=false”属性,不参与对集合的控制。如果不设置“mappedBy”属性,JPA会为一对多关联关系设置一个中间表。

4.一对一关联

使用学习hibernate时的例子,用户包含大文本信息的地址属性。

外键关联:

在用户表的Addr属性或getAddr属性方法上添加注解:

@ManyToOne(cascade={CascadeType.PERSIST})

@JoinColumn(name="cid")

@OneToOne”为一对一关联关系注解。

@JoinColumn”设置外键。

name="aid"”外键名称为“aid”。

unique=true”外键唯一性,用户与地址一一对应。

在地址表的User属性或getUser属性方法上添加注解:

@OneToOne

@JoinColumn(name="aid",unique=true)

@OneToOne”为一对一关联关系注解。

mappedBy="addr"”取消对集合的控制权,用User实体来控制外键的值。

主键关联:

在用户表的Addr属性或getAddr属性方法上添加注解:

@OneToOne”为一对一关联关系注解。

@PrimaryKeyJoinColumn”,设置主键关联列。

name="userid"”,本实体关联字段的名称。

referencedColumnName="addrid"”,所关联实体的表中的字段名称。

在地址表的User属性或getUser属性方法上添加注解:

@OneToOne(mappedBy="addr")

@OneToOne”为一对一关联关系注解。

mappedBy="addr"”取消对集合的控制权,用User实体来控制外键的值。

5.多对多关联

经典的例子,教师与学生多对多关联关系。

Teacher实体的stus集合属性或getStus属性方法上添加注解:

@OneToOne

@PrimaryKeyJoinColumn(name="userid",referencedColumnName="addrid")

@ManyToMany”设置多对多关联关系。

@JoinTable”设置关联表。

name="jpa_links"”中间表表名。

joinColumns=@JoinColumn(name="tid")”设置Teacher实体对应的关联列。数组类型,可以设置多重主键。

inverseJoinColumns=@JoinColumn(name="sid")”设置Student实体对应的关联列。数组类型,可以设置多重主键。

Student实体的teas集合属性或getTeas属性方法上添加注解:

@OneToOne(mappedBy="addr")

@ManyToMany”为多对多关联关系注解。

mappedBy="addr"”取消对集合的控制权。

6.继承关系

继承关系有三种解决方法,我们仍然使用学习hibernate时所使用的例子。一个员工实体(Employee),一个钟点工子实体(HourlyEmployee)和一个薪水工子实体(SalaryEmployee)。

1).继承关系树对应一张表

Employee实体类上面添加注解:

@ManyToMany

@JoinTable(name="jpa_links",

joinColumns=@JoinColumn(name="tid"),

inverseJoinColumns=@JoinColumn(name="sid"))

@Entity”设置实体。

@Table(name="jpa_inherit_single_ess")”设置表名。

@Inheritance(strategy=InheritanceType.SINGLE_TABLE)”设置集成策略为单个表,将整个继承关系树保存在一张表中。

@DiscriminatorColumn(name="type",discriminatorType=DiscriminatorType.STRING)”设置区分器字段名称和类型。

@DiscriminatorValue("ee")Employee对应的区分类型值为“ee”。

HourlyEmployee实体类上面添加注解:

@ManyToMany(mappedBy="stus")

@Entity”设置实体。

@DiscriminatorValue("he")Employee对应的区分类型值为“he”。

SalaryEmployee实体类上面添加注解:

@Entity

@Table(name="jpa_inherit_single_ess")

@Inheritance(strategy=InheritanceType.SINGLE_TABLE)

@DiscriminatorColumn(name="type",discriminatorType=DiscriminatorType.STRING)

@DiscriminatorValue("ee")

@Entity”设置实体。

@DiscriminatorValue("se")Employee对应的区分类型值为“se”。

2).每个类对应一张表,使用外键关联。

Employee实体类上面添加注解:

@Entity”设置实体。

@Table(name="jpa_inherit_join_ees")”设置表名。

@Inheritance(strategy=InheritanceType.JOINED)”设置集成策略为联合,为继承关系树中每个成员创建一个表,并使用外键关联(父类的主键被做为子类的外键)。

HourlyEmployee实体类上面添加注解:

@Entity

@DiscriminatorValue("he")

@Entity”设置实体。

@Table(name="jpa_inherit_join_hes")”设置表名。

@PrimaryKeyJoinColumn(name="eeid")”设置外键。

SalaryEmployee实体类上面添加注解:

@Entity

@DiscriminatorValue("se")

@Entity”设置实体。

@Table(name="jpa_inherit_join_ses")”设置表名。

@PrimaryKeyJoinColumn(name="eeid")”设置外键。

3).联合表,每个类单独一个表,使用union联合。

Employee实体类上面添加注解:

bor
分享到:
评论

相关推荐

    传智播客JPA学习笔记修改免积分版

    ### 传智播客JPA学习笔记知识点梳理 #### 一、JPA概述与核心价值 - **定义**: JPA (Java Persistence API) 是由 Sun 官方提出的一种 Java 持久化标准,旨在为 Java 开发者提供一套统一的对象-关系映射 (ORM) 工具,...

    01_传智播客JPA详解_全面阐释和精彩总结JPA

    Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的数据。...在“01_传智播客JPA详解_全面阐释和精彩总结JPA”这个资源中,你将找到关于JPA的深入讲解和实用技巧,帮助你全面掌握这一技术。

    北京传智播客JPA经典教学PPT

    JPA广泛应用于企业级Java应用程序,尤其是在EJB和Spring框架中,为服务层提供了强大的数据访问支持。同时,由于其与Java EE和Java SE的良好集成,JPA也常用于构建分布式和Web应用程序。 总之,JPA是Java开发中处理...

    黎活明老师讲解的JPA源码

    JPA必将成为Java持久化解决方案的主流,如果你是Hibernate或者TopLink的等ORM技术的忠实用户,不管你是否情愿,你迟早也得使用JPA,那现在正好可以借助传智播客视频教程的帮助,开始学习和尝试JPA吧!

    11_传智播客JPA详解_JPA中的一对多延迟加载与关系维护

    本教程“11_传智播客JPA详解_JPA中的一对多延迟加载与关系维护”聚焦于JPA在处理一对多关系时的延迟加载机制以及如何有效地维护这些关系。 一、JPA一对多关系 在数据库中,一对多关系意味着一个实体可以与多个其他...

    08_传智播客JPA详解_分析JPA与持久化实现产品对接的源代码

    08_传智播客JPA详解_分析JPA与持久化实现产品对接的源代码

    传智播客JAVA全套种子共20G

    《2010传智播客struts2.1.8视频教程》1.09G 《EJB3.0视频教程》180M 《JDBC视频教程》664M 《jpa详解视频教程》165M 《spring2.5视频教程》365M 《传智播客_AJAX视频教程》1.27G 《传智播客_FTP视频教程》117M ...

    07_传智播客JPA详解_使用JPA加载_更新_删除对象

    本课程"07_传智播客JPA详解_使用JPA加载_更新_删除对象"将深入讲解JPA在加载、更新和删除对象方面的应用。 首先,让我们了解一下JPA的基本概念。JPA通过实体类(Entity Class)来映射数据库表,实体类中的属性对应...

    09_传智播客JPA详解_使用JPQL语句进行查询

    在本课程"09_传智播客JPA详解_使用JPQL语句进行查询"中,我们将深入学习如何利用JPQL进行数据查询。 **课程内容概览:** 1. **JPQL基础**:讲解JPQL的基本语法,包括如何选择、从哪个实体中选择、以及如何使用...

    15_传智播客JPA详解_JPA中的联合主键

    在Java世界中,Java Persistence API(JPA)是Oracle公司推出的用于对象关系映射(ORM)的标准框架,它简化了数据库操作,使开发者能够用Java对象来操作数据库记录。本教程将聚焦于JPA中的一个关键概念——联合主键...

    04_传智播客JPA详解_第一个JPA实例与JPA主键生成策略

    【标题】"04_传智播客JPA详解_第一个JPA实例与JPA主键生成策略"涉及的关键知识点主要包括Java Persistence API (JPA)的基础应用、首个JPA实例的创建以及JPA主键生成策略的理解和配置。JPA是Java平台上的一个标准,...

    传智播客JPA学习笔记.pdf

    JPA通过将Java类与数据库表之间的映射关系定义在元数据中,简化了数据访问层的开发工作。 **1. 全面阐释和精彩总结JPA** JPA的核心理念是将Java对象和数据库记录进行映射,使得开发者可以使用Java对象来操作数据库...

    03_传智播客JPA详解_搭建JPA开发环境和全局事务介绍

    了解以上基础后,你可以观看"03_传智播客JPA详解_搭建JPA开发环境和全局事务介绍"的自学视频,视频将更深入地展示如何操作和实践。学习过程中,你将看到如何配置JPA环境,创建并管理实体,以及如何在实际项目中运用...

    02_传智播客JPA详解_JPA开发环境和思想介绍

    本套“02_传智播客JPA详解_JPA开发环境和思想介绍”自学视频主要涵盖了以下几个关键知识点: 1. **JPA基础概念**:首先,视频会解释什么是JPA,它与Hibernate等ORM框架的关系,以及为什么在Java开发中需要使用JPA。...

    05_传智播客JPA详解_日期_枚举等字段类型的JPA映射

    本课程"05_传智播客JPA详解_日期_枚举等字段类型的JPA映射"深入讲解了JPA在处理特定字段类型,如日期和枚举时的映射方法。以下是关于JPA和这些特定字段类型映射的详细知识: 1. **JPA基础**: JPA通过提供API和...

    传智播客——JPA学习笔记

    传智播客——JPA学习笔记 网络上有一份pdf格式的《JPA学习笔记》,但是内容排版有点乱,而且有缺失的部分,小弟从原来的blog处拷贝出来,并加以排版,制作成了chm格式的,大家应该知道chm格式比较适合作为参考资料或...

Global site tag (gtag.js) - Google Analytics