总结在使用JPA时需要注意的几点

  • 在调用persist(entity)方法之前,一定要保证entity所有的非集合类成员都已经被正确地赋值。
  • @OneToMany关系中,如果要删除many端(主动端)的实体,必须先从one端(被动端)的集合类中移除该实体,然后再调用remove(entity)方法才能删除成功。
  • @OneToMany关系中,未设置级联删除的情况下,如果要删除one端(被动端)实体,则必须先删除one端集合类中所有的实体(或者将many端所有实体的对应field设为null),才能删除one端实体本身,否则会引发数据表外键关联错误。
  • 如果只使用了实体的主键值,或者只调用实体的setXX()方法,那么在查找该实体时使用getReference能有效减少数据库查询次数。 See StackOverflow
  • 事务提交时EntityManager会刷将实体状态与数据库同步,一般无需手动调用flush(), 在更新实体时无需再调用persist(), merge()方法。
  • 在对实体进行操作时,要时刻注意当前是否还在事务的范围之内。
  • 如果要eager加载实体中的集合类,最好在查询时使用JOIN语句,这样能避免在遍历实体时触发的一次数据库查询。
  • 与将数据表的数据copy到实体对象中相比,在数据表中搜索相关记录的过程更加耗时。因此应当尽量减少数据库查询次数,而不是为了”节省内存”而只读取某几个字段的值。
时间: 2025-01-17 07:20:48

总结在使用JPA时需要注意的几点的相关文章

使用Spring data Jpa 时遇到 java.lang.ClassNotFoundException: org.springframework.core.ReactiveTypeDescriptor

背景 原本项目是使用SSM+Maven进行开发,而后想同时使用Jpa(即mybatis和jpa混用),配置好相关文件后,使用Junit做测试时,出现以下错误. 主要: ERROR - Caught exception while allowing TestExecutionListener [org.springframewor[email protected]29774679] to prepare test instance [[email protected]]java.lang.Ille

Spring整合JPA时,为实体类添加@Entity注解时提示The type MultipartEntity is deprecated

这个情况是由于导入错了Entity包所导致的. 按住Alt+T时,会有两个关于@Entity的提示 org.hibernate.annotations.Entity 和 javax.persistence.Entity,我们应该使用javax.persistence.Entity.此时就不会出现过时的提示. @org.hibernate.annotations.Entity 和 @javax.persistence.Entity 的区别: JPA的Entity类和Hibernate的Entity

SpringBoot 使用JPA时解决no session的方法

1.在application.yml中添加 1 spring.jpa.open-in-view: true 2.在使用查询的方法添加 @Transactional 原文地址:https://www.cnblogs.com/famary/p/10333489.html

(转) Spring Data 系列之JPA

转自:https://my.oschina.net/ztlyde/blog/68513 引入: Spring Data是SpringSource基金会下的一个用于简化数据库访问,并支持云服务的开源框架.其主要目标是使得数据库的访问变得方便快捷,并支持map-reduce框架和云计算数据服务.对于拥有海量数据的项目,可以用Spring Data来简化项目的开发. 然而针对不同的数据储存访问使用相对的类库来操作访问.Spring Data中已经为我们提供了很多业务中常用的一些接口和实现类来帮我们快速

【Spring】27、JPA 实现乐观锁@Version注解的使用

持久层使用jpa时,默认提供了一个注解@Version来实现乐观锁 简单来说就是用一个version字段来充当乐观锁的作用.先来设计实体类 /** * Created by xujingfeng on 2017/1/30. */ @Entity @Table(name = "t_student") public class Student { @Id @GenericGenerator(name = "PKUUID", strategy = "uuid2&

Play Framework - JPA Between 写法

使用Play Framework的JPA 时,可以使用简写的语法实现Between判断查询,此时的参数位置很重要,第一个参数是上界,第二个参数是下界,我觉得有点奇怪. 代码如下: List<Order> orders = Order.find(     "byTimestampBetween",      new Date(timestampEnd),  // 上界     new Date(timestampBegin) // 下界     ).fetch();

JPA @PersistenceContext和@Transactional Annotation

JPA(Java Persistence API )也就是说,java存储数据API,它提供的接口更方便的存储数据,当然,经过一些复杂的,并需要使用查询操作Java Persistence query language,个和sql基本一样,仅仅是须要遵循还有一些语法规则.能够參考http://download.oracle.com/javaee/5/tutorial/doc/bnbuf.html . 在使用JPA时,比方你的MySql中有定义了一个Lesson表格,如今想对Lesson表格进行加

4、JPA table主键生成策略(在JPA中table策略是首推!!!)

用 table 来生成主键详解 它是在不影响性能情况下,通用性最强的 JPA 主键生成器.这种方法生成主键的策略可以适用于任何数据库,不必担心不同数据库不兼容造成的问题. initialValue不起作用? Hibernate 从 3.2.3 之后引入了两个新的主键生成器 TableGenerator 和 SequenceStyleGenerator.为了保持与旧版本的兼容,这两个新主键生成器在默认情况下不会被启用,而不启用新 TableGenerator 的 Hibernate 在提供 JPA

jpa注解

http://www.oracle.com/technetwork/cn/middleware/ias/toplink-jpa-annotations-100895-zhs.html#ManyToOne 1 JPA 批注参考 版本: 5/12/06 作为 Java 企业版 5 (Java EE 5) Enterprise Java Bean (EJB) 3.0 规范的组成部分,Java 持续性 API (JPA) 显著简化了 EJB 持续性并提供了一个对象关系映射方法,该方法使您可以采用声明方式