ORM——使用spring jpa data实现逻辑删除

前言   

    在业务中是忌讳物理删除数据的,数据的这个对于一个IT公司可以说是最核心的资产,如果删除直接就物理删除,无疑是对核心资产的不重视,可能扯的比较远,本文最主要是想通过spring jpa data实现逻辑删除。

    在日常开发中我们可以方便的通过findXxx等增查改数据,但是如果直接使用deleteXxx的话,数据是直接从数据库删除的,这是我们不想要的,我们数据库中设计了is_del字段话,默认0是未删除,1是删除,如果在删除的时候,希望是只是一个update的动作,把is_del改成1。

    当然你可以在删除的时候,重写dao删除的操作,通过传入的删除id值,查询需要删除的实体,然后通过Update操作进行逻辑操作,这样是可行的,不过jpa data提供了一个更优雅的操作方式。

开始   

        jpa data提供了一个注解@SQLDelete,可以在操作的实体上注解,定义注解属性sql,sql就是一个update语句,具体可以看下面这个实体类:

@Data
@Accessors(chain = true)
@Entity
@Table(name = "SCORE_HIS")
@SQLDelete(sql = "update SCORE_HIS set IS_DEL = 1 where HIS_ID = ?")
@Where(clause = "IS_DEL = 0")
public class ScoreHis {
    @Id
    @Column(name = "HIS_ID")
    private String hisId;
    
    .....    

    @Type(type = "org.hibernate.type.NumericBooleanType")
    @Column(name = "IS_DEL")
    private boolean isDel = false;
}

    在实体类中注解了@SQLDelete,并且使用@Where注解,对查询进行时候必须是没有被删除的,在查询的时候会在条件里面加上注解中的未删除条件,在下面这行代码中调用delete的方法:

@Transactional
public void deleteScoreHis(String scoreHisId){
    scoreHisDao.delete(scoreHisId);

    ....省略代码
}

    上述操作执行后,库中的IS_DEL字段变成了1,成功的实现了逻辑删除的操作。

总结

    spring jpa data让dao层的写法轻松了很多,但是一些比较深层的使用,有待一步步挖掘(比如动态条件查询,现在写起来还是挺麻烦),但是我觉得可以很好的替代hibernate,毕竟是对hibernate的封装。

 

转载于:https://my.oschina.net/u/3470849/blog/1832775

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值