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

前言   

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

    在平常开发中咱们能够方便的经过findXxx等增查改数据,可是若是直接使用deleteXxx的话,数据是直接从数据库删除的,这是咱们不想要的,咱们数据库中设计了is_del字段话,默认0是未删除,1是删除,若是在删除的时候,但愿是只是一个update的动做,把is_del改为1。sql

    固然你能够在删除的时候,重写dao删除的操做,经过传入的删除id值,查询须要删除的实体,而后经过Update操做进行逻辑操做,这样是可行的,不过jpa data提供了一个更优雅的操做方式。数据库

开始   

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

@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的方法:hibernate

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

    ....省略代码
}

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

总结

    spring jpa data让dao层的写法轻松了不少,可是一些比较深层的使用,有待一步步挖掘(好比动态条件查询,如今写起来仍是挺麻烦),可是我以为能够很好的替代hibernate,毕竟是对hibernate的封装。开发

相关文章
相关标签/搜索