传智播客-jpa与hibernate(1)-实体和主键生成

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

jpa全称是Java Persistence API,是sun公司出台的面向数据持久化层的规范,即面向接口编程,以达到“平台”无关性(这个“平台”是指jpa产品,例如hibernate,toplink,openjpa等)。hibernate是符合jpa规范的产品之一。

 

说到数据持久化,先说一下以下几点:
1、对于数据持久化的思想而言,内存只是一个交换数据的地方,这意味着如果断电或者进程被杀,数据就会丢失。
2、为了防止数据丢失,所以需要将数据保存到外层(硬盘,U盘或其他存储设备等)。
3、能够实现数据持久化保存的技术就称之为数据持久化。除了jpa,还有jdbc、io等都是。
4、应用系统里的数据持久化层是从业务逻辑层分离出来的。

 

关于实体:
1、在jpa规范里,被托管的对象都是实体,但是是用实体名来区分实体的,如果没有显示声明,默认的实体名即不包含全路径的类名,所以如果不同包下有相同类名,应该显示声明实体名予以区分,例如@Entity(name="XXX")。
2、在jpa规范出来前,hibernate等数据持久化层技术产品早已大行其道,鱼龙混杂,jpa的出现可以说对这个市场进行了规范。hibernate在jpa出来前是用配置文件注册托管实体的(还有一些辅助工具帮助实现实体和表模式的相互转换,可以参见《深入浅出Hibernate》),但是jpa只支持注解方式(jpa支持配置文件方式,只是很少有人这么用,就当它没有吧。。。)。所以hibernate有两种方式注册托管实体:xml配置文件和注解。
3、如果用的jpa产品是hibernate,则在persistence.xml配置文件中不用注册实体类名也能被hibernate识别,因为hibernate有扫描机制,但是其它jpa产品不一定有,所以为了提高程序的可移植性,还是在文件中加上比较好,而且这样写也比较规范。

 

再说访问方式:
前文说过,hibernate支持两种访问方式,属性访问和方法访问。而且hibernate里方法访问优先级高于属性访问。如果两种访问方式同时设置,则属性访问无效。这意味着,你可以同时设立两种访问方式,而hibernate自有决断。但是jpa只允许定义一种访问方式。此外,hibernate访问级别的粒度比较细,可以在同一个实体里对不同字段(你可以理解为同一个类里的不同属性)设定不同访问级别。jpa则是一刀切的做法,通过@id/@EmbeddedId的注解位置,即由主键来决定当前实体所有字段的访问方式。

 

根据jpa规范,每个实体必须有ID映射到主键:
1、简单类型
  @id注解实体中的单个字段/属性
  @GeneratedValue可以采用4种策略自动生成值SEQUENCE|TABLE|IDENTITY|AUTO
关于table主键生成策略,有些类似hibernate的hilo方式。不同的数据库主键生成策略不一定一致,但所有的数据库都支持表策略,支持更新操作,所以用table策略的话相对而言可以提高可移植性,尤其测试跨数据库系统时table策略很好使。

NOTE:hibernate3.2.0的时候还不支持jpa的sequence生成策略的initialValue和allocationSize两个参数
2、可以是用户定义的类,但是必须定义在等级实体树的根上/超类上,而且必须实现serializable接口以及实现equals()/hashcode()方法。
  @EmbeddedId注解实体中的单个字段/属性
  @IdClass注解实现多个id字段的组合

而hibernate里的简单类型的单个主键 @GeneratedValue的生成策略有INCREMENT|IDENTITY|SEQUENCE|NATIVE|HILO|UUID(32)|ASSIGN(这些注释/元素的属性的具体含义可以参见相关文档)7种方式,前面6个适用于代理主键,assign适用于单个自然主键(指将具有业务含义的字段设置为主键),也可以用和id元素同级的元素<componsite-id>定义多个业务字段合成的自然主键;注解的话则有三种方式:@Id和@Embeddedable/@EmbeddedId/@IdClass。
示例:
(1)@Id和@Embeddedable

(2)@EmbeddedId

(3)@IdClass

JPA基本属性注解 JPA注解1、@Entitypackage javax.persistence;@Target(TYPE) @Retention(RUNTIME)public @interface Entity{    String name( ) default "";}name( )属性指定实体bean的名称,如果没有为该属性提供取值,默认值为 bean class 的非限 阅读详情

相关推荐

持久化API(JPA)系列()实体关系映射(ORM)之单表映射@EmbeddedId

本文将介绍《联合主键:使用@EmbeddedId嵌入外部主键

chestnut 2004

JPA复合主键问题

@EmbeddedId应用于实体类或映射超类的持久字段或属性,以表示可嵌入类的组合主键。可嵌入的类必须标注为@Embeddable,并实现序列化接口Serializable。   在实体类中,只能有一个@EmbeddedId注解,并且不能@Id注解同时存在。   @MapsId注解可以@Embedded I的注解一起使用,用来指定派生的主键,不支持在嵌入式类中定义关系映射。 ...

Cainiao111112的博客 611

通过JPA注解映射视图的实体jpa 视图 无主键 @Query注解的用法(Spring Data JPA) jpa 使用sql语句...

参考: https://blog.csdn.net/qq465235530/article/details/68064074 https://www.cnblogs.com/zj0208/p/6008627.html   这里主要说一下怎么用jpa映射一个视图的实体类,其实跟表映射一样,就是需要添加一个空的主键id标识   package com.cf.bus.core.rs.template.d...

weixin_34008805的博客 2586

传智播客--JPA的CRUD操作,映射实体

没有学习之前就听说过 JPA ,开始想自学来着.不知道为什么总是感觉这个技术很难.所以都没有尝试过.今天通过老师的讲解,很快就上手了.呵呵,好多问题其实没有自己想象的那样难.这个人真的是感觉有点意思. JPA 的为了使项目中持久层的 ORM 项目解耦而出现的技术.无论项目的持久层由什么 ORM 来实现都对项目上层调用的代码没有影响.这里我们用 hibernate 来是 JPA 的实现

图画hadoop 1332

JPA,ORM,立即,延迟加载等知识的解释(1

1.传统的使用jdbc操作数据库的方法: 其中ORM思想: 目的:操作实体类就相当于操作数据库表,不再重点关注:sql语句 建立两个映射关系:1.实体表的映射关系。 2.实体类中的属性表中字段的映射关系。 实现了ORM思想的框架:mybatis,hibernate. JPA规范: JPA的全称是Java Persistence API, 即Java 持久化API,是SU...

weixin_42030357的博客 761

专辑:JPA详解视频教程

简介:JPA用于整合现有的ORM技术,可以简化现有Java EEJava SE应用的对象持久化的开发工作,实现ORM的统一。JPA作为一项对象持久化的标准,不但可以获得Java EE应用服务器的支持,还可以直接在Java SE中使用。JPA必将成为Java持久化解决方案的主流,如果你是...

171

ORM思想 JDBC规范 hibernate Jpa规范 Spring Data Jpa

本篇文章为黑马程序员传智播客的记录,方便自己复习 简单介绍: ORM思想: Object Relationship Mapping -----对象关系映射 目的:操作POJO(实体类)等价于操作数据库的表 ①POJO类表的映射关系 ②POJO类中属性表中字段的映射关系 JDBC: 只需要修改一下连接接口的规则其他的少量的地方即可使用多个数据库 hibernate: 一个开源的对象关系映射框架,他对JDBC进行了非常轻量级的对象封装,他将POJO(实体)数据库的表建立映射关系,是一个全自动的OR

BOWWOB的博客 330

传智播客_jpa详解视频教程

【观看须知:】本视频教程为传智播客JPA详解视频教程,教程采用的AVI方式发布,所以看起来很流畅,大家可以通过包中附带的CamPlay.exe(拖入即可)观看学习。【友情提示:】JPA用于整合现有的ORM技术,可以简化现有Java EEJava SE应用的对象持久化的开发工作,实现ORM的统一。JPA作为一项对象持久化的标准,不但可以获得Java EE应用服务器的支持,还...

weixin_33738578的博客 285

传智播客学习之JPA

今天是上课的第一天,由徐老师给我们上JPA的课,新年过后,这是一个惊喜,因为又是徐老师带我们的课程,大家都十分喜欢徐老师,因为自从听完Hibernate后,“徐侠客”这三个字已经深深扎在我们班的每个同学心里了。今天也大家分享一下JPA相关知识,虽然JPA在国内还不是很火,但是在国外,JPA的使用还是十分多的,而且JPA在未来还是很有发展前景的。一、JPA概述JPA(Java Pe

qinli_2009的专栏 655

Spring Data JPAJPAhibernate之间的关系(2)

Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据库的访问操作。它提供了包括增删改查等在内的常用功能 关系: JPA是一套规范,内部是有接口抽象类组成的。hibernate是一套成熟的ORM框架,而且Hibernate实现了JPA规范,所以也可以称hibernateJPA的一种实现方式,我们...

weixin_42030357的博客 253

Spring Data JPA

一、JPA概述及基本操作 1、ORM思想 ORM(Object-Relational Mapping) 表示对象关系映射。 目的:通过操作实体类就可以对数据库表进行操作 建立两个映射: 实体表的映射 实体类属性表中字段的映射 实现ORM思想的框架:Hibernate、mybatis 2、JPA的介绍 Hibernate封装jdbc,是一个orm关系对象映射框架,可以自动生成sq...

USTSD的博客 108

jpa入门

1.表对应的实体类 @Entity //声明实体类 @Table(name = "cst_customer") //实体表建立映射关系 public class Customer { @Id //主键 @GeneratedValue(strategy = GenerationType.IDENTITY)//主键自增 @Column(name =...

weixin_33701294的博客 79

SpringDataJPA简易入门

第一步: 万年不变maven工程中的pom.xml文件到坐标 <dependencies> <!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connecto...

qq_43766467的博客 218

Hibernate 学习之HelloWorld

Hibernate如何去学习 ——Helloword 本文章纯属个人见解,本人大三学生,学校上课仅仅讲到了SSH框架中的Struts2,对于HibernateSpring,在此之前,不曾有过任何接触 根据传智播客官网中提供的免费视频自学ing,部分资料源自于此 转载请注明出处          如何去使用Hibernate呢,当然,跟struts2一样,导入相关包

DarkRake 804

[Hibernate 框架学习]一、初步体验

[Hibernate 框架学习]一、初步体验前言 上一周大致扫了一遍马士兵老师的 Struts2 教程,而这一周则开始看 Hibernate 的教程了,教程选择了传智播客上的 2016 年的 Hibernate 视频教程,相对来说也比较新。讲解的是 Hibernate 5.x 版本,而目前最新的版本是 Hibernate 5.2.12。 对于我而言,开始改变自己的学习方法。视频教程是四

hochenchong的博客 389

Hibernate 学习笔记

1.HelloWorld cfg.xml配置文件,copy  改mysql,name password 、MySQLDirlect等。创建数据库表,创建表名同名的类,对应的id name(配置文件,将实体类映射到数据库中的表  hbm.xml)  创建测试类,config session,getTransaction,commit。 MySQL图形化管理工具 Navicat for My...

qq_39054417的博客 249

hibernate框架学习第一天:hibernate介绍及基本操作

框架辅助开发者进行开发,半成品软件,开发者框架进行合作开发 Hibernate3Hibernate是一种基于Java的轻量级的ORM框架 基于Java:底层实现是Java语言,可以脱离WEB,在纯JAVA环境下运行 轻量级:重量级比对,消耗资源比较小,运算速度比较快 ORM:(ORMapping:Object Relation Mapping)对象关系映射 O:Java对象 R:关系型数...

weixin_30257433的博客 121

SpringDataJPA 中的复杂查询

基于首次在 EJB2.0 中引入的 EJB 查询语言(EJB QL),Java 持久化查询语言(JPQL)是一种可移 植的查询语言,旨在以面向对象表达式语言的表达式,将 SQL 语法简单查询语义绑定在一起·使 用这种语言编写的查询是可移植的,可以被编译成所有主流数据库服务器上的 SQL。 其特征原生 SQL 语句类似,并且完全面向对象,通过类名属性访问,而不是表名表的属性。 实体类 @Da...

tiangoua的博客 264
上一篇: 传智播客-hibernate(2)-实体关系与基本的性能优化
下一篇: 传智播客-jpa与hibernate(2)-CRUD和关联关系
fjf133
博客等级 码龄18年 19粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值