Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın Türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi

0
Spring ile çalışırken soft delete işlemini nasıl yapabilirim?

Açık 1 Cevaplar 56 Gösterim Java
Soft delete kavramını kullanmak için normalde önce kaydı delete çağırmıyor onun yerine update ediyorum. Sonrasında ise bütün sorgularımda o kolonu eklemek zorunda kalıyorum. Bunun daha kolay bir yolu var mıdır?

1 cevap

1

Bir entity için entityRepo.delete() metodunu çağırdığımız zaman arkada normal olarak delete from ..... komutu çalışıyor. JPA kullanırken delete komutunun davranışını değiştirebiliyoruz.

Bunun için şöyle birşey yapmamız gerekiyor.

@SQLDelete(sql = "update CAM_RULE set deleted_at=sysdate WHERE id = ?")
public class Entitim {
...
  @Column(name = "deleted_at")
  private deletedAt;
}

Burda gördüğümüz @SQLDelete annotation delete metodunun öntanımlı davranışını değiştiriyor ve entitimRepo.delete(entitim) çağırdığımız zaman bu sql kodu çalışıyor.

Buraya kadar güzel. Bundan sonra entitimRepo.findAll() dediğimiz zaman bu deletedAt kolonu dolu olanların gelmemesini istiyoruz. Keza bizim için artık silindiler anlamına geliyor. Bunun için aşağıdaki gibi bir kod parçası eklediğimiz zaman otomatik olarak bütün sorgularımızı bu sorgu eklenerek çağıracaktır.

@SQLDelete(sql = "update CAM_RULE set deleted_at=sysdate WHERE id = ?")
@Where(clause = "deleted_at is null")
public class Entitim {
...
  @Column(name = "deleted_at")
  private deletedAt;
}

@Where annotation ile bir sorgunun where kısmına eklenilecek kod parçasını yazıyoruz. Bunu yazdığımız zaman çalıştırılan jpa'nın yönettiği bütün sorgulara (native query hariç) bu kod parçasını ekleyecektir. Bu durumda da deleted_at kolonu null olan kayıtlar her zaman geleceği için soft delete işlemini gerçekleştirmiş olacaktır.

(5.3k puan)