当前位置:首页 > Java > 正文内容

JPA使用-实体类上常用注解

flowstone6年前 (2019-12-11)Java511

@SQLDelete

场景描述

JPA中提供了简单的CRUD操作,其中删除操作是物理删除,但是实际应用中,系统中的数据是一种资源,不能直接删除,应该做到逻辑删除,JPA中删除操作是不可取的。

场景示例

调用JPA的删除方法,如下代码所示:

@Test
public void testJpaDelete() {  
  //此处根据id删除角色信息
  roleRepository.deleteById(1);
}


执行上面的测试方法,数据表中主键为1的数据,已经被删除掉,看下JPA的执行SQL如下所示:

delete from role where id=?


此语句为JPA删除操作的默认执行语句。

解决方案

JPA的默认删除方法,并不可取,可以在Role实体上加上@SQLDelete注解,并写SQL语句,如下所示:

@SQLDelete(sql = "update role set is_deleted = 1 where id = ?")


上面的注解代表着,只要执行JPA的删除操作,执行的SQL语句为我们自己定义的SQL语句。

测试一下

@Test
public void testJpaDelete() {
  roleRepository.deleteById(2);
}


结果打印的SQL执行语句,如下所示

update role set is_deleted = 1 where id = ?


@DynamicInsert

场景描述

在JPA中添加/更新都是使用save()方法,一般情况下,创建数据表的时候,会给某些字段设置默认的值,避免在插入的时候手动赋值,如创建时间,是否删除等等。

save方法会把没有值的对象,默认赋空值,造成,原数据表的默认值失效。

场景示例

解决方案

@DynamicUpdate


扫描二维码推送至手机访问。

版权声明:本文由薛尧的博客发布,如需转载请注明出处。

本文链接:https://flowstone.sourceforge.io/?id=55

分享给朋友:

相关文章

IntelliJ IDEA技巧一之隐藏.idea目录

问题场景通过IntelliJ IDEA软件创建Java Web项目时,项目目录中总会生成.idea配置目录并在软件界面里显示,影响项目美感,如何在软件界面中隐藏.idea目录呢?解决方法打开IDEA软件的设置(Mac是Preferences...

Spring Cloud入门教程一之Eureka Server

项目环境MacOSJDK1.8IntelliJ IDEA 2018.2Maven 3.5.4创建项目采用Spring Initializr创建项目选择Cloud Discovery->Eureka Discovery->项目名称...

Java内存缓存-通过Map定制简单缓存

缓存在程序中,缓存是一个高速数据存储层,其中存储了数据子集,且通常是短暂性存储,这样日后再次请求此数据时,速度要比访问数据的主存储位置快。通过缓存,可以高效地重用之前检索或计算的数据。为什么要用缓存场景在Java应用中,对于访问频率高,更新...

Java多线程-线程中止

不正确的线程中止-StopStop:中止线程,并且清除监控器锁的信息,但是可能导致 线程安全问题,JDK不建议用。 Destroy: JDK未实现该方法。/**  * @author simon  ...

CPU缓存和内存屏障

CPU性能优化手段-缓存为了提高程序运行的性能,现代CPU在很多方面对程序进行了优化。例如:CPU高速缓存。尽可能地避免处理器访问主内存的时间开销,处理器大多会利用缓存(cache)以提高性能。多级缓存L1 Cache(一级缓存)是CPU第...

代码优化-多态代替IF条件判断

场景描述在开发的场景中,常常会遇到打折的业务需求,每个用户对应的等级,他们的打折情况也是不一样的。例如普通会员打9折,青铜会员打8.5折,黄金会员打8折等等。在一般开发中最简单的就是判断用户的等级,然后对订单作对应的打折处理。场景示例写了一...