Spring Framework-এর মধ্যে @Entity, @Repository এবং @Transactional অ্যানোটেশনগুলো ব্যবহৃত হয় ডেটাবেস সম্পর্কিত কাজগুলো পরিচালনা করতে। এই অ্যানোটেশনগুলো Spring Data JPA বা অন্যান্য ORM (Object-Relational Mapping) ফ্রেমওয়ার্কের সাথে কাজ করে এবং ডেটাবেসের সাথে ইন্টারঅ্যাকশন সহজ করে তোলে। নিচে প্রতিটি অ্যানোটেশন কী এবং কীভাবে ব্যবহৃত হয় তা বিস্তারিতভাবে আলোচনা করা হলো।
1. @Entity
@Entity অ্যানোটেশনটি JPA (Java Persistence API)-এর একটি গুরুত্বপূর্ণ অংশ। এটি ব্যবহার করে আপনি একটি জাভা ক্লাসকে একটি Entity হিসেবে চিহ্নিত করেন, যা ডেটাবেসের টেবিলের সাথে ম্যাপ হবে।
ব্যবহার:
- @Entity ক্লাসের উপরে ব্যবহৃত হয়।
- এটি Spring Data JPA এর সাথে ব্যবহৃত হয় যাতে জাভা অবজেক্টকে ডেটাবেস টেবিলের রেকর্ডে রূপান্তর করা যায়।
Example:
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Employee {
@Id
private Long id;
private String name;
private String department;
// 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;
}
}
ব্যাখ্যা:
@Entity: এটি Employee ক্লাসটিকে ডেটাবেস টেবিলের প্রতিনিধিত্বকারী ক্লাস হিসেবে চিহ্নিত করেছে।@Id: এটি Employee ক্লাসের প্রাইমারি কী চিহ্নিত করে, যা ডেটাবেস টেবিলের প্রতিটি রেকর্ডকে এককভাবে চিহ্নিত করবে।
2. @Repository
@Repository অ্যানোটেশনটি Spring Data JPA বা Hibernate-এর সাথে ব্যবহৃত হয়। এটি Data Access Object (DAO) হিসেবে কাজ করে এবং ডেটাবেসের সাথে ইন্টারঅ্যাকশন করার জন্য ব্যবহৃত হয়। Spring-এ @Repository অ্যানোটেশনটি @Component অ্যানোটেশনের মতোই কাজ করে, তবে এটি বিশেষভাবে Exception Translation এর জন্য ব্যবহৃত হয়, অর্থাৎ ডেটাবেস সম্পর্কিত ত্রুটিগুলি Spring’s DataAccessException-এ রূপান্তরিত হয়।
ব্যবহার:
- @Repository ব্যবহার করা হয় DAO ক্লাসে (Data Access Layer) যাতে এটি Spring-এ স্বয়ংক্রিয়ভাবে কম্পোনেন্ট স্ক্যান হয় এবং ডেটাবেসের সাথে সংযুক্ত থাকে।
Example:
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
// Custom queries (if any)
Employee findByName(String name);
}
ব্যাখ্যা:
@Repository: এটি EmployeeRepository ইন্টারফেসটিকে একটি Spring Bean হিসাবে চিহ্নিত করে, যা ডেটাবেস থেকে Employee অবজেক্টসের ডেটা পরিচালনা করবে।- JpaRepository: এটি Spring Data JPA এর একটি ইন্টারফেস, যা ডেটাবেসে CRUD অপারেশন করতে ব্যবহৃত হয়। এখানে Employee টেমপ্লেট টির জন্য CRUD অপারেশন সরবরাহ করা হবে।
3. @Transactional
@Transactional অ্যানোটেশনটি Spring Framework এর একটি গুরুত্বপূর্ণ অ্যানোটেশন যা ট্রানজ্যাকশন ব্যবস্থাপনা করতে ব্যবহৃত হয়। এটি আপনাকে একাধিক ডেটাবেস অপারেশন (যেমন, ইনসার্ট, আপডেট, ডিলিট) একসাথে সমাপ্ত বা বাতিল (commit/rollback) করতে সাহায্য করে।
ব্যবহার:
- এটি মেথড বা ক্লাস লেভেলে ব্যবহার করা যেতে পারে।
- যখন আপনি @Transactional ব্যবহার করেন, তখন সমস্ত ডেটাবেস অপারেশন এক ট্রানজ্যাকশনে অন্তর্ভুক্ত হয়।
- যদি কোনো অপারেশন ব্যর্থ হয়, তাহলে পুরো ট্রানজ্যাকশনটি রোলব্যাক হয়, যাতে ডেটাবেসের অবস্থা অপরিবর্তিত থাকে।
Example:
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class EmployeeService {
private final EmployeeRepository employeeRepository;
public EmployeeService(EmployeeRepository employeeRepository) {
this.employeeRepository = employeeRepository;
}
@Transactional
public void updateEmployeeDepartment(Long employeeId, String newDepartment) {
Employee employee = employeeRepository.findById(employeeId).orElseThrow(() -> new RuntimeException("Employee not found"));
employee.setDepartment(newDepartment);
employeeRepository.save(employee);
}
}
ব্যাখ্যা:
@Transactional: এটি updateEmployeeDepartment মেথডে ব্যবহার করা হয়েছে, যার মানে হচ্ছে যদি কোনো একটি অপারেশন ব্যর্থ হয় (যেমন,employeeRepository.save(employee)), তাহলে পুরো ট্রানজ্যাকশনটি রোলব্যাক হবে এবং ডেটাবেসে কোনো পরিবর্তন হবে না।- @Transactional ক্লাস বা মেথড লেভেলে প্রয়োগ করা হয়।
@Entity, @Repository, এবং @Transactional এর সমন্বিত ব্যবহার
এই অ্যানোটেশনগুলো একসাথে ব্যবহৃত হলে, Spring অ্যাপ্লিকেশনটি ডেটাবেসের সাথে সহজে যোগাযোগ করতে পারে এবং একটি কার্যকরী ট্রানজ্যাকশন সিস্টেম প্রদান করে।
Complete Example (Using all annotations):
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.Entity;
import javax.persistence.Id;
import org.springframework.data.jpa.repository.JpaRepository;
@Entity
public class Employee {
@Id
private Long id;
private String name;
private String department;
// Getters and Setters
}
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
Employee findByName(String name);
}
@Service
public class EmployeeService {
private final EmployeeRepository employeeRepository;
@Autowired
public EmployeeService(EmployeeRepository employeeRepository) {
this.employeeRepository = employeeRepository;
}
@Transactional
public void updateEmployeeDepartment(Long employeeId, String newDepartment) {
Employee employee = employeeRepository.findById(employeeId).orElseThrow(() -> new RuntimeException("Employee not found"));
employee.setDepartment(newDepartment);
employeeRepository.save(employee);
}
}
ব্যাখ্যা:
- Employee: এটি একটি Entity যা ডেটাবেস টেবিলের সাথে ম্যাপ করা হয়েছে।
- EmployeeRepository: এটি একটি Repository ইন্টারফেস যা
JpaRepositoryথেকে ইনহেরিট করে এবং ডেটাবেসের CRUD অপারেশন সরবরাহ করে। - EmployeeService: এটি একটি Service ক্লাস যেখানে
@Transactionalব্যবহার করা হয়েছে, যাতে সমস্ত ডেটাবেস অপারেশন এক ট্রানজ্যাকশনে সম্পন্ন হয়।
Conclusion
- @Entity: ডেটাবেস টেবিলের সাথে সম্পর্কিত Java Class হিসাবে চিহ্নিত করে।
- @Repository: এটি DAO (Data Access Object) হিসেবে কাজ করে, এবং Spring Data JPA তে ডেটাবেস সম্পর্কিত অপারেশন পরিচালনা করে।
- @Transactional: এটি ডেটাবেস অপারেশনগুলির একটি ট্রানজ্যাকশন তৈরি করে, যাতে সমস্ত অপারেশন একযোগে কার্যকর বা বাতিল করা যায়।
এই তিনটি অ্যানোটেশন একসাথে ব্যবহার করে আপনি Spring অ্যাপ্লিকেশন তৈরি করতে পারেন যা কার্যকরীভাবে ডেটাবেসের সাথে যোগাযোগ করে এবং ট্রানজ্যাকশন নিরাপত্তা নিশ্চিত করে।
Read more