版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JPA高频面试题及详细答案(实战版)一、基础概念类1、什么是JPA?它和Hibernate的关系是什么?参考答案:JPA是Java持久化API,是Java官方定义的一套ORM持久化规范,属于接口和标准,不是具体实现。它只定义了数据库操作的注解、接口和行为规则,没有具体的执行代码。而Hibernate是JPA的主流实现框架。简单来说:JPA是标准,Hibernate是实现。我们开发中使用的@Entity、@Id、@Column等注解,以及EntityManager、Repository接口,都是JPA规范定义的,底层运行的核心逻辑、SQL生成、缓存机制等,都是由Hibernate完成的。除此之外,EclipseLink也是JPA的实现框架,但行业内基本以Hibernate为主。2、JPA、MyBatis的核心区别是什么?工作中如何选型?参考答案:核心区别:1)JPA是全自动ORM框架,面向对象操作,开发者几乎不用写SQL,框架自动根据实体、方法名生成SQL,适配单表、简单多表查询,开发效率极高;2)MyBatis是半自动ORM框架,SQL和代码分离,SQL由开发者手动编写,灵活性极高,便于复杂查询、多表关联、定制化SQL优化。选型原则:业务系统以单表CRUD、简单业务查询为主,追求快速开发、少写代码,优先用JPA(SpringDataJPA);业务存在大量复杂多表关联、统计查询、动态SQL、SQL调优需求高的场景,优先用MyBatis/MyBatis-Plus。3、SpringDataJPA是什么?和原生JPA有什么区别?参考答案:原生JPA是最基础的规范,需要开发者手动获取EntityManager、调用persist、merge、find等方法完成数据库操作,代码冗余度高。SpringDataJPA是Spring基于原生JPA封装的一套工具框架,进一步简化了JPA操作。它通过接口代理、方法名解析、默认实现的方式,让开发者只需定义Repository接口,无需写任何实现代码,就能完成CRUD、分页、排序、条件查询等操作。简单总结:SpringDataJPA是对原生JPA的增强和简化,是目前企业开发的主流使用方式。二、核心注解与实体映射类4、JPA常用核心注解有哪些?分别作用是什么?参考答案:1)@Entity:标识当前类为数据库实体类,被JPA托管,必须配合主键注解使用;2)@Table(name="xxx"):指定实体对应的数据库表名,类名和表名不一致时必须配置;3)@Id:标识字段为数据库主键;4)@GeneratedValue:主键生成策略,常用四种:-AUTO:框架自动适配数据库主键策略(默认);-IDENTITY:依赖数据库自增主键(MySQL常用);-SEQUENCE:依赖数据库序列(Oracle常用);-TABLE:通过数据表维护主键,基本不用;5)@Column:映射数据库字段,可设置字段名、长度、是否非空、唯一、是否可更新/插入;6)@Transient:标识字段为临时字段,不映射数据库表字段,仅用于业务传输;7)@Temporal:处理日期类型,指定数据库存储格式(DATE、TIME、TIMESTAMP);8)@Lob:标识大文本、大二进制字段,对应数据库longtext、blob类型。5、@Column中nullable、unique、insertable、updatable各自作用?日常开发常用场景?参考答案:1)nullable:默认true,设置为false表示数据库字段非空,新增、修改时框架会做非空校验;2)unique:默认false,设置为true表示该字段唯一,框架会自动创建唯一索引;3)insertable:默认true,设置为false表示新增数据时,不插入该字段,适用于数据库自动填充字段(如创建时间);4)updatable:默认true,设置为false表示修改数据时,不更新该字段,适用于创建时间、创建人等不可修改字段。日常开发中,创建时间、创建人一般设置insertable=true、updatable=false;更新时间、更新人设置insertable=true、updatable=true。6、JPA实体中主键生成策略IDENTITY和AUTO的区别?MySQL下推荐用哪个?参考答案:IDENTITY:完全依赖数据库自增机制,插入数据时,先插入数据,再从数据库获取自增主键,MySQL专属适配策略,执行效率高,无额外开销。AUTO:框架自动判断数据库类型,MySQL下会默认走TABLE主键策略,会单独创建一张主键表维护主键值,频繁插入数据时会产生锁竞争,性能较差。实战结论:MySQL环境下,主键策略必须手动指定为IDENTITY,不要使用默认AUTO,避免性能问题。三、关联关系映射(重点高频)7、JPA四种关联关系分别是什么?日常开发最常用的是哪几种?参考答案:JPA支持四种实体关联关系:一对一、一对多、多对一、多对多。日常开发最常用、最核心的是:一对多、多对一,90%的业务关联都可以用这两种关系实现。一对一、多对多使用场景较少。1)多对一(@ManyToOne):多的一方关联一的一方,比如多个订单对应一个用户,订单表是多的一方,维护外键,是主控方;2)一对多(@OneToMany):一的一方关联多的一方,比如一个用户对应多个订单,用户表是一的一方,不维护外键,是被控方;3)一对一(@OneToOne):如用户和用户详情,一一对应;4)多对多(@ManyToMany):如用户和角色,一个用户多个角色,一个角色多个用户,会自动生成中间表。8、什么是主控方、被控方?mappedBy作用是什么?必须写在哪里?参考答案:主控方:维护外键关联关系的实体,数据库外键存在于主控方表,负责关联数据的新增、修改、删除;被控方:不维护外键,仅做查询关联,不负责关联数据更新。mappedBy的核心作用:放弃当前实体的关联关系维护权限,标识当前实体是被控方,关联关系由对方实体的对应字段维护。使用规则:mappedBy只能写在【一对多】的一的一方(被控方),绝对不能写在多的一方。比如用户(一)关联订单(多),用户实体的@OneToMany注解上需要加mappedBy="user",对应订单实体中的user关联字段。9、@ManyToOne和@OneToMany默认的加载策略是什么?会产生什么问题?如何解决?参考答案:1)@ManyToOne(多对一):默认立即加载(EAGER),查询多的一方数据时,会立刻联查关联的一方数据;2)@OneToMany(一对多):默认延迟加载(LAZY),查询一的一方数据时,不会立即查关联的多条数据,只有调用关联集合时才会查询。常见问题:N+1查询问题例如查询所有订单(N条数据),每条订单都会单独查询一次关联用户,最终执行1次订单查询+N次用户查询,数据库压力极大。解决方案:1)通过@Fetch(FetchMode.JOIN)开启联表查询,一次性查询所有数据;2)使用JPA的@Query手写JOIN查询,规避N+1;3)统一将@ManyToOne设置为LAZY延迟加载,按需查询。10、多对多关联@ManyToMany使用注意事项?为什么开发中尽量少用?参考答案:JPA的@ManyToMany会自动生成中间表,无需手动创建实体,使用简单,但实际开发中不推荐使用。缺点:1)自动生成的中间表无法扩展字段,如果后续需要给关联关系添加创建时间、状态等字段,无法实现;2)多对多关联删除、修改数据容易出现级联异常、数据错乱;3)查询灵活性差,无法针对中间表做条件筛选。实战替代方案:手动创建中间表实体,将多对多拆分为两个一对多、多对一关联,完全可控,方便后续业务迭代。四、查询方式与Repository接口11、SpringDataJPA有哪几种查询方式?参考答案:四种主流查询方式,适配不同场景:1)方法名命名查询:通过规范方法名自动生成SQL,如findByUsername、findByAgeGreaterThan,适合简单条件查询,无需写SQL;2)@Query注解查询:手写JPQL语句,适配复杂单表、多表查询,灵活性高于方法名查询;3)原生SQL查询:@Query(nativeQuery=true),手写原生SQL,适配复杂统计、特殊数据库语法;4)Specification动态条件查询:适合查询条件不固定、动态拼接的场景,无需手写SQL,代码可复用性高。12、讲一下JPA方法名查询的常用关键字?参考答案:日常高频使用关键字:-And/Or:多条件与、或;-Equals/Is:等于(可省略,默认就是等于);-Not:不等于;-GreaterThan/LessThan:大于、小于;-GreaterThanEqual/LessThanEqual:大于等于、小于等于;-Like:模糊查询;-In:包含集合;-IsNull/IsNotNull:为空、非空;-OrderBy:排序。示例:List<User>findByAgeGreaterThanAndUsernameLike(Integerage,Stringusername);13、JPA中CrudRepository、JpaRepository、PagingAndSortingRepository的区别?参考答案:1)CrudRepository:最基础的接口,只提供基础CRUD方法,不支持分页、排序;2)PagingAndSortingRepository:继承CrudRepository,新增分页、排序功能,无批量操作方法;3)JpaRepository:继承PagingAndSortingRepository,是功能最全的接口,除了CRUD、分页排序,还提供批量保存、批量删除、刷新持久化、获取全部数据等方法。实战规范:开发中统一继承JpaRepository,无需重复造轮子,功能全覆盖。五、事务、缓存与持久化机制14、JPA的save方法是新增还是修改?底层判断逻辑是什么?参考答案:JPA的save()方法是新增/修改通用方法,底层会自动判断,无需开发者区分。底层判断规则:1)如果实体主键为null或0,判定为新增,执行insert语句;2)如果实体主键有值,判定为修改,执行update语句。坑点注意:如果手动设置主键值,会直接触发修改操作,覆盖原有数据,开发中新增数据禁止手动赋值自增主键。15、JPA一级缓存、二级缓存的区别?默认开启哪个?参考答案:一级缓存(Session缓存):默认开启,是线程级、事务级缓存,生命周期和当前事务一致。同一个事务内,多次查询同一数据,只会执行一次SQL,事务提交或回滚后,缓存清空。一级缓存无需手动配置,自带生效。二级缓存:默认关闭,是全局级、跨事务缓存,整个应用共享。开启后,不同事务、不同请求可以共享缓存数据,减少数据库查询。需要手动配置依赖和参数,日常开发中一般不开启,避免缓存一致性问题。16、JPA事务失效的常见场景有哪些?参考答案:和Spring事务失效场景基本一致,高频场景:1)方法权限不是public,@Transactional失效;2)同类中方法内部调用(A方法无事务,调用本类带事务的B方法),事务失效;3)异常类型不匹配,默认只回滚RuntimeException,普通Exception不回滚;4)多线程调用事务方法,线程独立事务,无法统一回滚;5)数据库引擎不支持事务(如MyISAM),必须使用InnoDB。六、性能优化与实战坑点(面试重点)17、JPA常见性能问题有哪些?如何优化?参考答案:问题1:N+1查询问题优化:使用JOIN联查、抓取模式配置、避免默认立即加载关联数据。问题2:批量操作性能差JPA普通saveAll循环逐条执行SQL,数据量大时极慢。优化:配置批量插入参数,使用JpaRepository批量方法,或手写原生批量SQL。问题3:不必要的字段更新save修改时会更新所有字段,哪怕字段无变化。优化:使用@DynamicUpdate注解,只更新变动字段。问题4:分页查询count统计慢复杂查询分页时,JPA默认自动执行count统计,耗时高。优化:自定义count查询,或业务允许的情况下取消count统计。18、@DynamicInsert、@DynamicUpdate作用是什么?工作中什么时候用?参考答案:1)@DynamicInsert:新增数据时,只插入非空字段,为空的字段不参与insert
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 就重要合同条款的确认信(4篇)
- 时间跨度2026年项目进度回复函(3篇)
- 2026年新产品付款催办通知4篇
- 心理教育助力教师职业成长方案
- 旅游服务行业销售绩效表
- 招聘20人!专科起报祁连县公安局2026年面向社会公开招聘警务辅助人员笔试模拟试题及答案解析
- 2027中国医学科学院血液病医院(中国医学科学院血液学研究所)社会招聘4人考试模拟试题及答案解析
- 健身中心会员私教课程安排七项标准流程手册
- 社区食堂数字化订餐系统实施方案指引
- 2026年湖南邮政人员招聘考试备考试题及答案
- 2026年成人高考专升本政治主观考试试题及答案
- 2026年江苏信息职业技术学院单招综合素质考试题库含答案解析
- 2026新苏教版六年级数学上册第七单元第1课《用数对表示位置》课件
- 李白《山中问答》课件
- 村主干公务员模拟考试试题及答案
- 2026年4月自考00067财务管理学试题及答案含评分参考
- 电气控制与PLC应用-基于S7-1200 PLC(第2版)
- 学前儿童家庭与社区教育(第2版)课件全套 第0-12章 绪论、家庭-社区与家庭、幼儿园、托育机构的合作
- 智慧冷链物流平台设计建设方案
- 2026年人教版英语九年级上册期中质量检测卷(附答案解析)
- 医保局档案室管理制度
评论
0/150
提交评论