初探JPA

什么是JPA:

JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,是一套java ORM框架的实现规范

相关介绍:
JPA百度百科
JPA基础(一):全面阐释和精彩总结JPA


JPA的好处:

有诸多实现框架 可以很方便的切换实现,也是java ORM框架的发展趋势,JPA不是一种新的ORM框架,他的出现只是用于规范现有的ORM技术,他不能取代现有的Hibernate,TopLink等ORM框架。相反,在采用JPA开发时,我们仍将使用到这些ORM框架,只是此时开发出来的应用不再依赖于某个持久化提供商。应用可以在不修改代码的情况下在任何JPA环境下运行,真正做到低耦合,可扩展的程序设计。


1.类级别注解:

注解描述
@Entity映射实体类
@Table映射数句库表

属性参数及描述:

注解属性可选描述
@Entityname对应数据库中的一个表。若表名与实体类名相同,则可以省略。
@Tablename功能同上
@Tablecatalog表示Catalog名称,默认为 Catalog(“”)。
@Tableschema表示Schema名称 , 默认为Schema(“”)。

2.属性级别注解:

注解描述
@Id映射生成主键
@Version定义乐观锁
@Column映射表的列
@Transient定义暂态属性

属性参数及描述:

注解属性可选描述
@Id--定义了映射到数据库表的主键的属性
@Version--以在实体bean中使用@Version注解,通过这种方式可添加对乐观锁定的支持
@Columnname表示数据库表中该字段的名称,默认情形属性名称一致
@Columnnullable表示该字段是否允许为 null,默认为 true
@Columnunique表示该字段是否是唯一标识,默认为 false
@Columnlength表示该字段的大小,仅对 String 类型的字段有效,默认值255
@Columninsertable表示在ORM框架执行插入操作时,该字段是否应出现INSETRT语句中,默认为 true
@Columnupdateable表示在ORM框架执行更新操作时,该字段是否应该出现在UPDATE语句中,默认为 true
@ColumncolumnDefinition表示该字段在数据库中的实际类型 ,指定映射类型
@Transient--表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性

2.1.扩展

注解描述
@GeneratedValue用于定义主键生成策略
@Basic用于声明属性的存取策略
@Temporal用于定义映射到数据库的时间精度

属性参数及描述:

注解属性可选描述
@GeneratedValuestrategyGenerationType.AUTO根据底层数据库自动选择(默认)
@GeneratedValuestrategyGenerationType.INDENTITY根据数据库的Identity字段生成
@GeneratedValuestrategyGenerationType.SEQUENCE使用Sequence来决定主键的取值
@GeneratedValuestrategyGenerationType.TABLE使用指定表来决定主键取值,结合@TableGenerator使用
@GeneratedValueGenerator_表示主键生成器的名称,这个属性通常和ORM框架相关 , 例如:Hibernate 可以指定 uuid 等主键生成方式
@BasicfetchFetchType.EAGER即时获取(默认的存取策略)
@BasicfetchFetchType.LAZY延迟获取
@TemporalTemporalTypeDATE日期
@TemporalTemporalTypeTIME时间
@TemporalTemporalTypeTIMESTAMP两者兼具

3.映射继承关系:

注解描述
@Inheritance定义所选择的策略. 这个注解需要在每个类层次结构(class hierarchy) 最顶端的实体类上使用

4.映射实体bean的关联关系:

注解描述
@OneToOne定义一对一
@OneToMany定义一对多
@ManyToOne定义多对一
@ManyToMany定义多对多

@OneToOne、@OneToMany、@ManyToOne、ManyToMany的共有属性及描述:

属性描述
fetchFetch.EAGER及时加载,多对一默认是Fetch.EAGER
fetchFetch.LAZY延迟加载,一对多默认是Fetch.LAZY
cascadeCascadeType.PERSIST保存
cascadeCascadeType.REMOVE删除
cascadeCascadeType.MERGE修改
cascadeCascadeType.REFRESH刷新
cascadeCascadeType.ALL全部
targetEntity_配置集合属性类型,如:@OneToMany(targetEntity=Book.class)

其他属性及描述:

属性描述
mappedBy用在双向关联中,把关系的维护权翻转 委托给对方维护

4.1.扩展

表之间的级联:

注解描述
@JoinTable用于定义中间表, 产生级联表,将双方的主键存放在一张独立的表中
@JoinColumn用于定义关联字段, 不产生级联表,将一方的主键存放在另一方的表中
在单向关系中没有mappedBy,主控方相当于拥有指向另一方的外键的一方。
1.一对一和多对一的@JoinColumn注解的都是在“主控方”,都是本表指向外表的外键名称。
2.一对多的@JoinColumn注解在“被控方”,即一的一方,指的是外表中指向本表的外键名称。
3.多对多中,joinColumns写的都是本表在中间表的外键名称, inverseJoinColumns写的是另一个表在中间表的外键名称。

5.嵌入字段与复合主键:

注解级别描述
@Embeddable类级别注解说明这个就是一个可被嵌套的类
@Embedded方法及字段级别注解用于标明嵌入字段
@EmbeddedId方法及字段级别注解用于标明嵌入字段为复合主键

6.扩展:

注解级别描述使用
@SecondaryTables类级别注解将一个实体类映射到数据库两张或更多表中配合@colum注解的table 属性使用

案例:Hibernate,JPA 对象关系映射之简单映射策略

属性参数及描述:

注解属性描述
@SecondaryTables@SecondaryTable[]标注表名

更多JPA注解:
JPA 注解使用


參考链接:
Hibernate注解方法使用总结(引用大半)
@JoinTable和@JoinColumn
Hibernate,JPA 对象关系映射之简单映射策略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值