- vừa được xem lúc

Soft Delete và ứng dụng của nó trong Spring Boot

0 0 8

Người đăng: Anh Trần Tuấn

Theo Viblo Asia

Nguồn: https://www.tuanh.net/blog/spring/soft-delete-and-application-in-spring-boot

Soft delete là một chiến lược quản lý dữ liệu tránh việc xóa vĩnh viễn các bản ghi. Khi một bản ghi được "soft delete", nó không bị xóa hoàn toàn khỏi cơ sở dữ liệu. Thay vào đó, một trường cụ thể (thường được gọi là cờ "đã xóa" hoặc cờ "is_deleted") được cập nhật để chỉ ra rằng bản ghi không còn hoạt động.

1. Lợi ích của Soft Delete

Khôi Phục Dữ Liệu: Trong trường hợp dữ liệu bị xóa một cách không mong muốn, hệ thống của chúng tôi cho phép phục hồi một cách dễ dàng mà không cần phải quay lại bản sao lưu.

Lịch Sử Dữ Liệu: Bằng cách duy trì một bản ghi đầy đủ về các thay đổi dữ liệu theo thời gian, người dùng có thể thu thập thông tin quý giá về các xu hướng và mẫu dữ liệu.

Tính Toàn Vẹn Dữ Liệu: Hệ thống của chúng tôi được thiết kế để bảo vệ các mối quan hệ giữa các tập dữ liệu khác nhau, đảm bảo rằng việc xóa thông tin từ một khu vực không làm ảnh hưởng đến cấu trúc dữ liệu tổng thể.

2. Triển khai chức năng Soft Delete trong Spring Boot

Để kích hoạt chức năng Soft Delete trong ứng dụng Spring Boot của bạn, hãy làm theo các bước sau:

2.1 Tạo thực thể với trường Soft Delete

Bước đầu tiên là tạo một trường mới trong thực thể của bạn để chỉ ra dữ liệu nào đã bị xóa. Ví dụ:

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Column;
import java.time.LocalDateTime; @Entity
@Table(name = "users")
public class User { @Id private Long id; @Column(nullable = false) private String name; @Column(name = "deleted_at") private LocalDateTime deletedAt; // Getters and Setters
} 

Trong ví dụ này, trường deletedAt sẽ chứa dấu thời gian khi bản ghi được đánh dấu là đã bị xóa. Nếu trường này là null, bản ghi vẫn còn hợp lệ.

2.2 Tạo một Repository Spring Data JPA với các phương thức truy vấn tùy chỉnh

Để chỉ lấy các bản ghi còn hoạt động, bạn cần điều chỉnh các phương thức trong repository của bạn. Ví dụ:

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; public interface UserRepository extends JpaRepository<User, Long> { @Query("SELECT u FROM User u WHERE u.deletedAt IS NULL") List<User> findAllActive(); @Query("SELECT u FROM User u WHERE u.id = :id AND u.deletedAt IS NULL") User findActiveById(@Param("id") Long id);
} 

Các phương thức findAllActive() và findActiveById() được thiết kế để chỉ lấy các bản ghi còn hoạt động, loại trừ bất kỳ bản ghi nào đã được đánh dấu để xóa.

2.3 Cập nhật Service để Triển khai Soft Delete

Trong lớp service của bạn, thêm một phương thức để đánh dấu bản ghi là đã bị xóa:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime; @Service
public class UserService { @Autowired private UserRepository userRepository; public void softDelete(Long id) { User user = userRepository.findById(id).orElseThrow(() -> new RuntimeException("User not found")); user.setDeletedAt(LocalDateTime.now()); userRepository.save(user); } public List<User> getActiveUsers() { return userRepository.findAllActive(); } public User getActiveUserById(Long id) { return userRepository.findActiveById(id); }
} 

3. Kết luận

Soft delete là một cách hiệu quả để quản lý dữ liệu trong các ứng dụng yêu cầu tính toàn vẹn và khả năng phục hồi dữ liệu. Với Spring Boot, việc triển khai soft delete có thể được thực hiện dễ dàng bằng cách thêm một trường cờ, cập nhật repository và service của bạn. Bằng cách làm theo các bước trên, bạn có thể đảm bảo rằng hệ thống của bạn có thể xử lý các yêu cầu quản lý dữ liệu một cách linh hoạt và hiệu quả. Nếu bạn có bất kỳ câu hỏi nào hoặc cần thêm thông tin về việc triển khai soft delete trong Spring Boot, vui lòng để lại bình luận của bạn bên dưới!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cùng tìm hiểu về HTTP request methods

Đối với các lập trình viên web nói chung thì chúng ta không thể nào mà không nghe đến các từ như get hoặc post, nó thực sự rất phổ biển. SUMARY.

0 0 47

- vừa được xem lúc

Sự khác biệt giữa DELETE và TRUNCATE trong Oracle Database

Trong Oracle, có hai câu lệnh để xóa dữ liệu trong bảng: DELETE và TRUNCATE. Mặc dù cả hai câu lệnh này đều có chức năng giống nhau nhưng lại có sự khác biệt đáng kể trong cách hoạt động của chúng.

0 0 28

- vừa được xem lúc

Java Spring - Tổng hợp các chủ đề từ cơ bản đến nâng cao

Trong bài viết này mình xin được tổng hợp một số chủ đề từ cơ bản đến nâng cao khi lập trình web với Java. Bên cạnh các kiến thức căn bản như làm thế nào để tạo mới project từ https://start.

0 0 63

- vừa được xem lúc

[JAVA] (Overview) Phần 1 - Spring vs. Spring Boot vs. Spring MVC

Tổng quan. Spring Framework từ lâu đã không còn xa lạ gì đối với lập trình viên Java nói chung và Java Web nói riêng, nó cung cấp rất nhiều tính năng giúp xây dựng sản phẩm một cách thuận tiện và nhan

0 0 48

- vừa được xem lúc

Spring Boot - Firebase push notification

1. Tạo tài khoản trên FCM console.

0 0 39

- vừa được xem lúc

Hikari: Connection is not available, request timeout after 30000ms

Ngày xửa ngày xưa... mà cũng không xưa lắm, câu chuyện xảy ra mới cách đây vài năm trước... Nhưng đừng lo, nếu chuyện đó xảy ra thì hi vọng Google đã kịp index bài viết của mình để các bạn search ra v

0 0 27