Hibernate এবং JPA ব্যবহারের সময় ডাটাবেজ অপারেশনে বিভিন্ন ধরণের এক্সসেপশন (Exceptions) ঘটে। এই এক্সসেপশনগুলো বুঝে সঠিকভাবে হ্যান্ডল করা গুরুত্বপূর্ণ। Hibernate এবং JPA নিজস্ব এক্সসেপশন হিয়ারার্কি ব্যবহার করে যা ডেভেলপারদের জন্য ডিবাগিং সহজ করে।
Hibernate এবং JPA এর প্রধান এক্সসেপশন
1. LazyInitializationException
- কেন ঘটে: Lazy loading সক্রিয় থাকলে এবং Hibernate সেশনের বাইরে অ্যাক্সেস করার চেষ্টা করলে।
- উদাহরণ:
User user = session.get(User.class, userId);
session.close();
System.out.println(user.getOrders().size()); // LazyInitializationException
- সমাধান:
- FetchType.EAGER ব্যবহার করা।
- Hibernate সেশন ব্যবহারের সময় lazy-loaded ডেটা অ্যাক্সেস করা।
- Spring-এ OpenSessionInView প্যাটার্ন ব্যবহার।
2. NonUniqueResultException
- কেন ঘটে: কোয়েরি একাধিক রেকর্ড রিটার্ন করে, অথচ কোয়েরি থেকে একক রেকর্ড প্রত্যাশা করা হয়।
- উদাহরণ:
Query query = session.createQuery("FROM User WHERE email = :email");
query.setParameter("email", "john.doe@example.com");
User user = (User) query.getSingleResult(); // NonUniqueResultException
- সমাধান:
getResultList()ব্যবহার করে লিস্ট রিটার্ন করা।- নিশ্চিত করা যে কোয়েরি শুধুমাত্র একটি রেকর্ড রিটার্ন করবে।
3. ConstraintViolationException
- কেন ঘটে: ডাটাবেস কনস্ট্রেইন্ট (Constraint) ভঙ্গ করা হলে।
- উদাহরণ:
- Primary Key ডুপ্লিকেট করা।
- Unique কনস্ট্রেইন্ট ভঙ্গ করা।
User user = new User();
user.setId(1); // ID already exists
session.save(user); // ConstraintViolationException
- সমাধান:
- ডেটা ইনপুট করার আগে ডুপ্লিকেট চেক করা।
- ডাটাবেস সঠিকভাবে ডিজাইন করা।
4. EntityNotFoundException
- কেন ঘটে:
getReference()ব্যবহার করে কোনো Entity পাওয়া না গেলে। - উদাহরণ:
User user = session.getReference(User.class, invalidId); // EntityNotFoundException
- সমাধান:
get()ব্যবহার করা, যা null রিটার্ন করে।- ডাটাবেসে Entity আছে কি না তা নিশ্চিত করা।
5. StaleObjectStateException
- কেন ঘটে: Optimistic Locking ভঙ্গ করলে।
- উদাহরণ:
User user1 = session.get(User.class, userId);
User user2 = session.get(User.class, userId);
user1.setName("User 1");
session.update(user1);
user2.setName("User 2");
session.update(user2); // StaleObjectStateException
- সমাধান:
@Versionএনোটেশন ব্যবহার করে Entity-তে ভার্সনিং যোগ করা।
6. TransactionRequiredException
- কেন ঘটে: ডেটা পরিবর্তনের জন্য Hibernate বা JPA ট্রান্সাকশন শুরু করা হয়নি।
- উদাহরণ:
session.save(user); // TransactionRequiredException
- সমাধান:
- Transaction শুরু করার জন্য Spring-এ
@Transactionalব্যবহার করা।
- Transaction শুরু করার জন্য Spring-এ
7. QuerySyntaxException
- কেন ঘটে: HQL/JPQL কোয়েরিতে সিনট্যাক্সগত ত্রুটি থাকলে।
- উদাহরণ:
Query query = session.createQuery("FROM Users"); // Incorrect table name
- সমাধান:
- কোয়েরি সঠিকভাবে লিখুন।
- HQL/JPQL এর সিনট্যাক্স মেনে চলুন।
8. PersistentObjectException
- কেন ঘটে: Hibernate সেশনের বাইরের অবজেক্টে পরিবর্তন আনতে গেলে।
- উদাহরণ:
User user = new User();
session.update(user); // PersistentObjectException
- সমাধান:
- Hibernate সেশনে অবজেক্ট অ্যাটাচ করা।
9. DataIntegrityViolationException
- কেন ঘটে: ডেটাবেসের Integrity কনস্ট্রেইন্ট ভঙ্গ হলে।
- উদাহরণ:
- Foreign Key কনস্ট্রেইন্ট ভঙ্গ।
Order order = new Order();
order.setUser(null); // Null Foreign Key
session.save(order); // DataIntegrityViolationException
- সমাধান:
- ডাটাবেসে Integrity কনস্ট্রেইন্ট চেক করা এবং মান সঠিকভাবে সেট করা।
10. OptimisticLockException
- কেন ঘটে: একাধিক ব্যবহারকারী একই Entity-তে একসাথে পরিবর্তন করার চেষ্টা করলে।
- উদাহরণ:
User user1 = session1.get(User.class, userId);
User user2 = session2.get(User.class, userId);
user1.setName("User 1");
session1.update(user1);
user2.setName("User 2");
session2.update(user2); // OptimisticLockException
- সমাধান:
@Versionব্যবহার করে Optimistic Locking সক্রিয় করা।
Hibernate এবং JPA এক্সসেপশন হ্যান্ডলিং এর সেরা পদ্ধতি
- Proper Logging: এক্সসেপশন লগ করে সঠিক কারণ নির্ণয় করুন।
- Spring Exception Translation:
@Repositoryএনোটেশন ব্যবহার করলে HibernateException গুলো Spring এরDataAccessExceptionএ কনভার্ট হয়। - Validation: ইনপুট ডেটা সঠিকভাবে যাচাই করা।
- Transactions: সঠিকভাবে ট্রান্সাকশন ব্যবস্থাপনা করা।
- Unit Tests: কোডে এক্সসেপশন পরিস্থিতি সিমুলেট করে টেস্ট করা।
Hibernate এবং JPA তে কমন এক্সসেপশনগুলি সম্পর্কে ধারণা এবং সেগুলোর সঠিক ব্যবস্থাপনা ডেটাবেস অপারেশনগুলোকে আরো কার্যকর করে তোলে।
Content added By
Read more