search
Giriş
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 oy
416 gösterim
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?
Java kategorisinde 6.2k puan

1 cevap

1 oy

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.

6.2k puan

İlgili sorular

0 oy
1 cevap 182 gösterim
182 gösterim
Spring JDBC Template ile update işlemini nasıl yaparım. Elimde bir nesne var ve sorguya direk nesneyi göndererek çalışmasını istiyorum.
6 Mart 2020 Java kategorisinde asefat 141 puan sordu
0 oy
1 cevap 330 gösterim
330 gösterim
Spring Boot ile bir uygulama geliştiriyorum. Haliyle birsürü entity sınıfım var. Swagger entegre ettiğim zaman bu entity sınıflarım için de endpoint açıldığını görüyorum. Ben sadece benim istediğim endpointlerin orada görünmesini istiyorum. Bunu nasıl sağlayabilirim?
1 Şubat 2021 Java kategorisinde kenan 6.2k puan sordu
0 oy
1 cevap 190 gösterim
190 gösterim
Spring data kullanırken elimdeki stored procedure nasıl çağırabilirim?
11 Mayıs 2020 Java kategorisinde kenan 6.2k puan sordu
0 oy
1 cevap 401 gösterim
401 gösterim
package com.test.user; import java.util.Set; import javax.xml.namespace.QName; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.soap.SOAPBody; ... null olduğu için herhangi bir atama işlemi gerçekleştiremiyorum. services.xml içinde gerekli tanımlar yapıldı. Bunu nasıl başarabilirim.
3 Ocak 2019 Java kategorisinde asefat 141 puan sordu
1 oy
1 cevap 1.1K gösterim
1.1K gösterim
Selamlar, Spring de kullanılan metodların üzerindeki @Transactional yapısı ve bunların attributeları (Propagation,Isolation,...) nedir? ne amaçla kullanılır? İkinci sorum olarak da nested transactional işlemlerde commit ve rollback attribute ları da göz önüne alırsak exception alması durumunca nasıl çalışır? Sevgiler Erkan
11 Ağustos 2018 Java kategorisinde erkanerkisi 211 puan sordu