ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:268.95KB ,
资源ID:22960482      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22960482.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(JPA官方文档Word文档下载推荐.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

JPA官方文档Word文档下载推荐.docx

1、Topic 是论坛的主题,而 PollTopic 是调查性质的论坛主题,它扩展于 Topic,一个调查主题拥有多个选项PollOption。这三个领域对象很好地展现了领域对象之间继承和关联这两大核心的关系。这3个领域对象将被映射到数据库的两张表中:其中,Topic 及其子类 PollTopic将映射到同一张 t_topic 表中,并用 topic_type 字段区分两者。而PollOption 映射到 t_polloption中。具有ORM 元数据的领域对象称为实体(Entity),按 JPA的规范,实体具备以下的条件:必须使用javax.persistence.Entity注解或者在XML映

2、射文件中有对应的元素;必须具有一个不带参的构造函数,类不能声明为final,方法和需要持久化的属性也不能声明为final;如果游离状的实体对象需要以值的方式进行传递,如通Session bean的远程业务接口传递,则必须实现 Serializable接口;需要持久化的属性,其访问修饰符不能是public,它们必须通过实体类方法进行访问。3. 使用注解元数据基本注解首先,我们对Topic 领域对象进行注解,使其成为一个合格的实体类:代码清单 1 :Topic 实体类的注解package com.baobaotao.domain;import javax.persistence.Column;im

3、port javax.persistence.DiscriminatorColumn;import javax.persistence.DiscriminatorType;import javax.persistence.DiscriminatorValue;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Inher

4、itance;import javax.persistence.InheritanceType;import javax.persistence.Temporal;import javax.persistence.TemporalType;Entity(name = T_TOPIC) public class Topic implements Serializable .Id -1GeneratedValue(strategy = GenerationType.TABLE) -2Column(name = TOPIC_ID) -3private int topicId;TOPIC_TITLE,

5、 length = 100) private String topicTitle;TOPIC_TIME)Temporal(TemporalType.DATE) private Date topicTime;TOPIC_VIEWSprivate int topicViews;/省略 get/setter 方法Entity:将领域对象标注为一个实体,表示需要保存到数据库中,默认情况下类名即为表名,通过name 属性显式指定表名,如处的 name = ,表示Topic 保存到 T_TOPIC表中;Id :对应的属性是表的主键,如-1所示;GeneratedValue:主键的产生策略,通过 strat

6、egy属性指定。默认情况下,JPA自动选择一个最适合底层数据库的主键生成策略,如 SqlServer 对应 identity,MySql对应 auto increment。在 javax.persistence.GenerationType中定义了以下几种可供选择的策略:1) IDENTITY:表自增键字段,Oracle 不支持这种方式;2) AUTO: JPA自动选择合适的策略,是默认选项;3) SEQUENCE:通过序列产生主键,通过SequenceGenerator 注解指定序列名,MySql 不支持这种方式;4) TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使

7、应用更易于数据库移植。不同的JPA实现商生成的表名是不同的,如 OpenJPA生成openjpa_sequence_table 表 Hibernate 生成一个 hibernate_sequences表,而TopLink则生成 sequence 表。这些表都具有一个序列名和对应值两个字段,如SEQ_NAME和 SEQ_COUNT。):属性对应的表字段。我们并不需要指定表字段的类型,因为JPA会根据反射从实体属性中获取类型;如果是字符串类型,我们可以指定字段长度,以便可以自动生成DDL语句,如处所示;Temporal(TemporalType.DATE):如果属性是时间类型,因为数据表对时间类型

8、有更严格的划分,所以必须指定具体时间类型,如所示。在javax.persistence.TemporalType枚举中定义了 3种时间类型:1) DATE :等于java.sql.Date2) TIME :等于 java.sql.Time3) TIMESTAMP :等于 java.sql.Timestamp继承关系Topic 和 PollTopic 是父子类,JPA 采用多种方法来支持实体继承。在父类中必须声明继承实体的映射策略,如代码清单2所示:代码清单 2 :继承实体的映射策略Inheritance(strategy =InheritanceType.SINGLE_TABLE) Discr

9、iminatorColumn(name = TOPIC_TYPE,discriminatorType =DiscriminatorType.INTEGER, length = 1) DiscriminatorValue(value=1)对于继承的实体,在javax.persistence.InheritanceType定义了 3种映射策略:SINGLE_TABLE:父子类都保存到同一个表中,通过字段值进行区分。这是我们Topic 实体所采用的策略, Topic 和 PollTopic 都保存到同一张表中,通过TOPIC_TYPE 字段进行区分,Topic 在 T_TOPIC表中对应 TOPIC

10、_TYPE= 1的记录,而 PollTopic 对应 TOPIC_TYPE=2的记录(稍后在 PollTopic 实体中指定);区别的字段通过 DiscriminatorColumn说明,如所示,区分字段对应该实体的值通过DiscriminatorValue指定,如所示;JOINED:父子类相同的部分保存在同一个表中,不同的部分分开存放,通过表连接获取完整数据;TABLE_PER_CLASS:每一个类对应自己的表,一般不推荐采用这种方式。关联关系我们再继续对PollTopic 进行注解,进一步了解实体继承的 JPA映射定义:代码清单 3 :PollTopic 映射描述Entity2public

11、 class PollTopic extends Topic .继承于 Topic 实体private boolean multiple; MAX_CHOICESprivate int maxChoices;OneToMany(mappedBy=pollTopic,cascade=CascadeType.ALL)private Set options = new HashSet();在处,通过DiscriminatorValue 将区分字段 TOPIC_TYPE 的值为 2。由于PollTopic实体继承于 Topic 实体,其它的元数据信息直接从 Topic 获得。JPA规范规定任何属性都默

12、认映射到表中,所以虽然我们没有给处的 multiple属性提供注解信息,但JPA将按照 默认的规则对该字段进行映射:字段名和属性名相同,类型相同。如果我们不希望将某个属性持久化到数据表中,则可以通过Transient注解显式指定:Transientprivate boolean tempProp1;在处,我们通过OneToMany 指定了一个一对多的关联关系,一个 PollTopic 包括多个 PollOption 对象(我们将在稍后的 PollOption中通过 ManyToOne 描述PollOption和 PollTopic 的关系,以建立 PollTopic 和 PollOption

13、的双向关联关系)。OneToMany中通过 mappedBy 属性指定“Many”方类引用“One”方类的属性名,这里 mappedBy=表示 PollOption实体拥有一个指定 PollTopic 的 pollTopic属性。下面,我们来看一下Many 方 PollOption 实体类的映射描述:代码清单 4 :PollOption 映射描述Entity(name=T_POLL_OPTIONpublic class PollOption implementsSerializable .IdGeneratedValue(strategy = GenerationType.TABLE)OPTI

14、ON_IDprivate int optionId;OPTION_ITEMprivate String optionItem;ManyToOne JoinColumn(name=, nullable=false) private PollTopic pollTopic;在处通过ManyToOne 描述了 PollOption和 PollTopic 的多对一关联关系,并通过JoinColumn指定关联 PollTopic 实体所对应表的“外键”,如所示。当然也可以通过OneToOne 和ManyToMany指定一对一和多以多的关系,方法差不多,不再赘述。Lob 字段 标注大数据!在JPA中 Lo

15、b类型类型的持久化很简单,仅需要通过特殊的 Lob注解就可以达到目的。下面,我们对Post 中的 Lob属性类型进行标注:代码清单 5 Post :标注 Lob 类型属性import javax.persistence.Basic;import javax.persistence.Lob;T_POSTpublic class Post implements Serializable .Lob -1Basic(fetch = FetchType.EAGER) -2POST_TEXT, columnDefinition =LONGTEXT NOT NULL) -3private String po

16、stText;Lob -1Basic(fetch = FetchType. LAZY) -2POST_ATTACHBLOBprivate byte postAttach;postText 属性对应 T_POST表的 POST_TEXT字段,该字段的类型是LONTTEXT,并且非空。JPA 通过Lob将属性标注为 Lob类型,如-1和-1 所示。通过Basic指定 Lob类型数据的获取策略,FetchType.EAGER表示非延迟 加载,而FetchType. LAZY表示延迟加载,如-2和-2 所示。通过Column的columnDefinition属性指定数据表对应的 Lob字段类型,如-3

17、和 -3 所示。关于JPA 注解的更多信息,你可以通过这篇文章进行更加深入的学习:http:/annotations.html4. 使用 XML 元数据除了使用注解提供元数据信息外,JPA也允许我们通过 XML提供元数据信息。条条道路通罗马,路路都是安康道,开发者安 全可以根据自己的习惯喜好择一而从。按照JPA的规范,如果你提供了 XML元数据描述信息,它将覆盖实体类中的注解元数据信息。XML元数据信息以 orm.xml 命名,放置在类路径的 META-INF目录下。JPA尽量让 XML和注解的元数据在描述的结构上相近,降低学习曲线和转换难度,所以我们在学习注解元数据后,学习XML元数据变得非

18、常简单。下面,我们给出以上实体的XML描述版本,你可以对照注解的描述进行比较学习:代码清单 6 XML元数据配置:orm.xmlentity-mappings xmlns=xmlns:xsi=/www.w3.org/2001/XMLSchema-instancexsi:schemaLocation=version=实体对象所在的包packagecom.baobaotao.domainentity class=TopicTopic 实体配置table name= /attributesid name=topicIdcolumn name=/generated-value strategy=TAB

19、LE/idbasic name=topicTitle length=30/basictopicTimetemporalDATEtopicViews/attributes/entityPollTopicPollTopic 实体配置discriminator-value2maxChoicesone-to-many name=options mapped-by=cascadecascade-all/cascade/one-to-manyPollOptionPollOption 实体配置optionIdoptionItemmany-to-one name= join-column name= null

20、able=false/many-to-onePostPost 实体配置postIdPOST_IDpostText fetch=EAGER column-definition=LONGTEXTNOT NULLlob/postAttachLAZY/entity-mappings从代码清单 6中,我们可以看出 PollTopic 并不需要通过特殊配置指定和 Topic的继承关系,这些信息将从实体类反射信息获取。所以从严格意义上来说,元数据信息或 XML和实体类结构信息共同构成的。5.JPA 的编程结构及重要的APIJavaEE 5.0 中所定义的JPA接口个数并不多,它们位于javax.persis

21、tence和javax.persistence.spi两个包中。 javax.persistence包中大部分API都是注解类,除此之外还包括EntityManager、Query等持久化操作接口。而 javax.persistence.spi包中的 4个API,是JPA的服务层接口。下面,我们就来认识一下这些重要的接口。EntityManager 的类型实体对象由实体管理器进行管理,JPA使用javax.persistence.EntityManager代表实体管理器。实体管理器和持久化上下文关联,持久化上下文是一系列实体的管理环境,我们通过EntityManager和持久化上下文进行交互。

22、有两种类型的实体管理器:容器型:容器型的实体管理器由容器负责实体管理器之间的协作,在一个JTA事务中,一个实体管理器的持久化上下文的状态会自动广播到所有使用EntityManager的应用程序组件中。Java EE应用服务器提供的就是管理型的实体管理器;应用程序型:实体管理器的生命周期由应用程序控制,应用程序通过javax.persistence.EntityManagerFactory的createEntityManager创建EntityManager实例。EntityManager 的创建过程javax.persistence.spi.PersistenceProvider 接口由 JPA的实现者提供,该接口由启动者调用,以便创建一个EntityManagerFactory 实例。它定义了创建一个EntityMan

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1