@CreatedDate এবং @LastModifiedDate কি?
@CreatedDate এবং @LastModifiedDate হল দুটি Spring Data JPA অ্যানোটেশন, যা ডেটাবেজে created timestamp (তৈরির সময়) এবং last modified timestamp (শেষ পরিবর্তনের সময়) স্বয়ংক্রিয়ভাবে সংরক্ষণ করতে ব্যবহৃত হয়।
- @CreatedDate: এই অ্যানোটেশনটি একটি ফিল্ডে ব্যবহৃত হয়, যা একটি Entity তৈরি করার সময় স্বয়ংক্রিয়ভাবে create টাইমস্ট্যাম্প রাখে।
- @LastModifiedDate: এই অ্যানোটেশনটি Entity এর একটি ফিল্ডে ব্যবহৃত হয়, যা Entity আপডেট হওয়ার সময় স্বয়ংক্রিয়ভাবে last modified টাইমস্ট্যাম্প রাখে।
এই অ্যানোটেশনগুলোর মাধ্যমে আপনি Audit Trails তৈরি করতে পারেন, যা Entity-র তারিখ এবং সময়ের তথ্য সংগ্রহ করে।
প্রয়োজনীয় কনফিগারেশন
Spring Data JPA এর সাথে এই অ্যানোটেশনগুলো ব্যবহারের জন্য Auditing সক্ষম করতে হবে। এই জন্য নিচের ধাপগুলো অনুসরণ করতে হবে:
ধাপ ১: Auditing কনফিগারেশন সক্রিয় করা
Spring Boot এ Auditing সক্রিয় করার জন্য @EnableJpaAuditing অ্যানোটেশন ব্যবহার করতে হবে। সাধারণত এটি মূল অ্যাপ্লিকেশন ক্লাসে বা কনফিগারেশন ক্লাসে যুক্ত করা হয়।
Application.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@SpringBootApplication
@EnableJpaAuditing
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
ধাপ ২: Entity ক্লাসে @CreatedDate এবং @LastModifiedDate ব্যবহার
এরপর Entity ক্লাসে @CreatedDate এবং @LastModifiedDate অ্যানোটেশন ব্যবহার করতে হবে। এছাড়া, @EntityListeners(AuditingEntityListener.class) অ্যানোটেশনটি যুক্ত করতে হবে যাতে Spring Auditing এর কার্যকারিতা সচল থাকে।
Employee.java
import jakarta.persistence.*;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import java.time.LocalDateTime;
@Entity
@EntityListeners(AuditingEntityListener.class)
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String department;
@CreatedDate
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime lastModifiedDate;
// Getters and Setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
public LocalDateTime getCreatedDate() {
return createdDate;
}
public void setCreatedDate(LocalDateTime createdDate) {
this.createdDate = createdDate;
}
public LocalDateTime getLastModifiedDate() {
return lastModifiedDate;
}
public void setLastModifiedDate(LocalDateTime lastModifiedDate) {
this.lastModifiedDate = lastModifiedDate;
}
}
ধাপ ৩: @CreatedDate এবং @LastModifiedDate এর ব্যবহার
যখন আপনি নতুন একটি Entity তৈরি করবেন, তখন @CreatedDate স্বয়ংক্রিয়ভাবে createdDate ফিল্ডে তারিখ এবং সময় সেট করবে। আর যখন Entity আপডেট হবে, তখন @LastModifiedDate স্বয়ংক্রিয়ভাবে lastModifiedDate ফিল্ডে বর্তমান তারিখ এবং সময় সেট করবে।
উদাহরণ ১: Employee Entity তৈরি এবং সংরক্ষণ
EmployeeService.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class EmployeeService {
@Autowired
private EmployeeRepository employeeRepository;
public Employee createEmployee(String name, String department) {
Employee employee = new Employee();
employee.setName(name);
employee.setDepartment(department);
return employeeRepository.save(employee);
}
}
এখানে, যখন createEmployee মেথডটি কল হবে, তখন নতুন Employee Entity তৈরি হবে এবং createdDate স্বয়ংক্রিয়ভাবে পূর্ণ হবে।
উদাহরণ ২: Employee Entity আপডেট করা
EmployeeService.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class EmployeeService {
@Autowired
private EmployeeRepository employeeRepository;
public Employee updateEmployee(Long id, String name, String department) {
Employee employee = employeeRepository.findById(id).orElseThrow(() -> new RuntimeException("Employee not found"));
employee.setName(name);
employee.setDepartment(department);
return employeeRepository.save(employee);
}
}
এখানে, যখন updateEmployee মেথডটি কল হবে, তখন lastModifiedDate স্বয়ংক্রিয়ভাবে আপডেট হবে।
ধাপ ৪: Repository ক্লাস
Spring Data JPA এর CrudRepository অথবা JpaRepository ইন্টারফেস ব্যবহার করে Entity ম্যানেজমেন্ট করা যায়। EmployeeRepository ক্লাসের জন্য, নিচে একটি উদাহরণ দেওয়া হলো:
EmployeeRepository.java
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
}
@CreatedDate এবং @LastModifiedDate এর সুবিধা
১. স্বয়ংক্রিয় টাইমস্ট্যাম্প
এই অ্যানোটেশনগুলোর মাধ্যমে আপনি Entity এর জন্য created এবং modified টাইমস্ট্যাম্প স্বয়ংক্রিয়ভাবে সংগ্রহ করতে পারেন, যা ডেটা অডিটিং এবং ট্র্যাকিং এর জন্য উপকারী।
২. পারফরম্যান্স উন্নয়ন
Spring Data JPA এর মাধ্যমে টাইমস্ট্যাম্প স্বয়ংক্রিয়ভাবে সংরক্ষণ করা যায়, ফলে ডেভেলপারদের জন্য এটি খুবই সুবিধাজনক এবং কোনো অতিরিক্ত কোড লেখা প্রয়োজন হয় না।
৩. ডেটাবেজ ট্র্যাকিং
ডেটাবেজে কোনো Entity কখন তৈরি এবং কখন পরিবর্তিত হয়েছে তা সহজে ট্র্যাক করা যায়।
সারাংশ
@CreatedDate এবং @LastModifiedDate অ্যানোটেশনগুলোর সাহায্যে Spring ORM এ Entity-এর টাইমস্ট্যাম্প গুলো স্বয়ংক্রিয়ভাবে সংরক্ষণ করা সম্ভব। এই অ্যানোটেশনগুলো ব্যবহার করে আপনি ডেটাবেজে Entity-র তৈরি এবং শেষ আপডেট সময়ের তথ্য ট্র্যাক করতে পারেন, যা বিশেষভাবে অডিটিং এবং ডেটা ম্যানেজমেন্টের জন্য গুরুত্বপূর্ণ।