jpa学习一

来源:互联网 发布:桌面文件恢复软件 编辑:程序博客网 时间:2024/06/15 22:45

JPA概要

1、jpa概述

JPA(Java Persistence API)作为JavaEE5.0平台标准的ORM规范,将得到所有Java EE服务器的支持。sun公司在充

分吸收现有ORM框架的基础上,得到了一个易于使用、伸缩性强的ORM规范。从目 前的开发社区的反应上看,JPA

受到了极大的支持和赞扬,JPA作为ORM领域标准化整合者的目标应该不难实现。JPA通过JDK 5.0注解或XML描述对

象-关系表的映射关系,并将运行期的实体对象持久化到数据库中,图1很好地描述了JPA的结构:

 

 

2 实体生命周期

实体生命周期是JPA中非常重要的概念,描述了实体对象从创建到受控、从删除到游离的状态变换。对实体的操作主

要就是改变实体的状态。

JPA中实体的生命周期如下图:

 

 

1 New,新创建的实体对象,没有主键(identity)值,也称初始状态

2 Managed,有id值,对象处于持久化上下文(Persistence Context)中,被EntityManager管理

3 Detached,游离状态,有id值,当对象已经游离到Persistence Context之外,进入Application Domain

4 Removed, 实体对象被删除,有id值,和Persistence Context有关联,但已经准备好从数据库中删除。

EntityManager提供一系列的方法管理实体对象的生命周期,包括:

5 persist, 将新创建的或已删除的实体转变为Managed(持久化)状态,数据存入数据库。

6 remove,将受控的实体移除掉。

7 merge,将游离实体转变为Managed状态,数据存入数据库。

8 refresh,自动刷新。

3、实体关系映射

基本关系映射

实体

数据库

jpa注解

可变设置

Class(User)

Table(USER)

@Entity

name="t_user"

id

id(primary key)

@Id

@GeneratedValue详见以下

username(String)

username(varchar)

@Column

name = "username", length = 100

time

time

@Temporal()

TemporalType.DATE  .....

 

@Entity:将域模型标注为一个实体,表示需要保存到数据库中,默认情况下类名即为表名,通过name属性显式指定

                表名,如@Entity(name="USER")表示User保存到t_user表中。

@Id :对应的属性是表的主键,

@GeneratedValue:主键的产生策略,通过strategy属性指定。默认情况下,JPA自动选择一个最适合底层数据库的

                                 主键生成策略,如SqlServer对应identity,MySql对应auto increment。在

                                 javax.persistence.GenerationType中定义了以下几种可供选 择的策略:

                              (1)IDENTITY:表自增键字段,Oracle不支持这种方式;

                              (2) AUTO:JPA自动选择合适的策略,是默认选项;

                              (3)SEQUENCE:通过序列产生主键,通过@SequenceGenerator注解指定序列名, MySql不

                                                               支持这种方式;

                              (4) TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数

                                                       据库移植。不同的JPA实现商生成的表名是不同的,如OpenJPA生成

                                                       openjpa_sequence_table表Hibernate生成一个hibernate_sequences表,而

                                                     TopLink则生成sequence表。这些表都具有一个序列名和对应值两个字段,

                                                     如 SEQ_NAME 和SEQ_COUNT。

@Column(name = "TOPIC_ID"):属性对应的表字段。我们并不需要指定表字段的类型,因为JPA会根据反射从实体

                                                     属性中获取类型;如果是字符串类型,我们可以指定字段长度,以便可以自动生成

                                                      DDL语句,如③处所示;

@Temporal(TemporalType.DATE):如果属性是时间类型,因为数据表对时间类型有更严格的划分,所以必须指定具

                                                         体时间类型,如④所示。

在javax.persistence.TemporalType枚举中定义了3种时间类型:

1) DATE :等于java.sql.Date 

2) TIME :等于java.sql.Time 

3) TIMESTAMP :等于java.sql.Timestamp 

 

今天就先写到这里,更多学习资料  it菜鸟营  GZ应届大学生IT

原创粉丝点击