Spring ORM-এ Exception Handling ডেটাবেস অপারেশন চলাকালীন ত্রুটি নির্ণয় এবং এর যথাযথ সমাধান প্রদানে গুরুত্বপূর্ণ ভূমিকা পালন করে। Spring Framework ডেটাবেস অপারেশনের জন্য নির্দিষ্ট DataAccessException এবং এর সাব-ক্লাস সরবরাহ করে, যা SQL বা Hibernate ত্রুটিকে আরও সাধারণ এবং সুনির্দিষ্ট রূপে প্রকাশ করে।
Spring ORM-এ Exception Handling কিভাবে কাজ করে?
Spring এর DataAccessException একটি Runtime Exception, যা ডেভেলপারদের Checked Exception ব্যবহার না করেও ত্রুটি পরিচালনা করতে দেয়। Spring ORM Hibernate, JPA, বা JDBC থেকে আসা ত্রুটিগুলোকে DataAccessException-এ রূপান্তর করে।
DataAccessException-এর কিছু সাধারণ সাব-ক্লাস:
- DuplicateKeyException: ডুপ্লিকেট প্রাইমারি কি বা ইউনিক কনস্ট্রেইন্ট ভায়োলেশন।
- DataIntegrityViolationException: ডেটার ইনটিগ্রিটি লঙ্ঘন।
- QueryTimeoutException: কুয়েরি টাইম আউট হলে।
- CannotAcquireLockException: ডাটাবেস লক না পেলে।
উদাহরণ: Spring ORM-এ Exception Handling
১. Maven Dependency (Spring ORM এবং Hibernate):
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.3.10</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.5.7.Final</version>
</dependency>
২. Entity Class:
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String position;
// Getters এবং Setters
}
৩. DAO Layer:
@Repository
public class EmployeeDao {
@Autowired
private SessionFactory sessionFactory;
public void saveEmployee(Employee employee) {
try {
Session session = sessionFactory.getCurrentSession();
session.save(employee);
} catch (DataIntegrityViolationException e) {
throw new RuntimeException("Data integrity violation: " + e.getMessage(), e);
} catch (Exception e) {
throw new RuntimeException("Unknown error occurred: " + e.getMessage(), e);
}
}
public Employee findEmployeeById(Long id) {
try {
Session session = sessionFactory.getCurrentSession();
return session.get(Employee.class, id);
} catch (Exception e) {
throw new RuntimeException("Error fetching employee: " + e.getMessage(), e);
}
}
}
৪. Service Layer:
@Service
public class EmployeeService {
@Autowired
private EmployeeDao employeeDao;
public void createEmployee(Employee employee) {
try {
employeeDao.saveEmployee(employee);
} catch (DuplicateKeyException e) {
System.out.println("Duplicate key error: " + e.getMessage());
} catch (DataAccessException e) {
System.out.println("Data access error: " + e.getMessage());
} catch (Exception e) {
System.out.println("General error: " + e.getMessage());
}
}
public Employee getEmployee(Long id) {
try {
return employeeDao.findEmployeeById(id);
} catch (Exception e) {
System.out.println("Error fetching employee: " + e.getMessage());
return null;
}
}
}
Exception Handling-এর বেস্ট প্র্যাকটিস
- সুনির্দিষ্ট Exception ধরা: যেমন
DuplicateKeyExceptionবাDataIntegrityViolationException। - Custom Exception তৈরি করা: Exception Handling আরও স্পষ্ট এবং ডিবাগিং সহজ করতে।
- লগ ব্যবহার করা: ত্রুটিগুলো লগ ফাইলের মাধ্যমে মনিটর করতে।
- Transaction Management নিশ্চিত করা: Exception হলে ডেটাবেস স্টেট রোলব্যাক করার জন্য।
Custom Exception উদাহরণ:
public class EmployeeNotFoundException extends RuntimeException {
public EmployeeNotFoundException(String message) {
super(message);
}
}
public Employee getEmployee(Long id) {
try {
Employee employee = employeeDao.findEmployeeById(id);
if (employee == null) {
throw new EmployeeNotFoundException("Employee not found with ID: " + id);
}
return employee;
} catch (EmployeeNotFoundException e) {
System.out.println(e.getMessage());
return null;
}
}
Spring ORM-এর Exception Handling ডেটাবেস সংক্রান্ত ত্রুটিগুলো সুনির্দিষ্টভাবে শনাক্ত এবং সমাধান করতে সাহায্য করে। এর মাধ্যমে অ্যাপ্লিকেশনের স্থিতিশীলতা এবং ডিবাগিং প্রক্রিয়া সহজ হয়।
Read more