সম্পূর্ণরূপে অবসন্ন হওয়ার জন্য, আপনি যদি JPA 1.0 বা JPA 2.0 বাস্তবায়ন ব্যবহার করেন তবে জিনিসগুলি আলাদা using
জেপিএ 1.0
JPA 1.0 এর সাথে আপনাকে ব্যবহার করতে হবে EntityManager#getDelegate()
। তবে মনে রাখবেন যে এই পদ্ধতির ফলাফল হ'ল হাইবারনেট ব্যবহার করে অ্যাপ্লিকেশন সার্ভার থেকে প্রয়োগযোগ্য নির্দিষ্ট অর্থ বহনযোগ্য is উদাহরণস্বরূপ JBoss এর সাথে আপনি যা করবেন:
org.hibernate.Session session = (Session) manager.getDelegate();
তবে গ্লাসফিশের সাহায্যে আপনাকে করতে হবে:
org.hibernate.Session session = ((org.hibernate.ejb.EntityManagerImpl) em.getDelegate()).getSession();
আমি সম্মতি জানাই, এটি ভয়াবহ এবং স্পেকটি এখানে দোষ দেওয়া (যথেষ্ট পরিষ্কার নয়)।
জেপিএ ২.০
জেপিএ ২.০ সহ, একটি নতুন (এবং আরও ভাল) EntityManager#unwrap(Class<T>)
পদ্ধতি রয়েছে যা EntityManager#getDelegate()
নতুন অ্যাপ্লিকেশনগুলির জন্য বেশি পছন্দ করা উচিত ।
তাই হাইপারনেটকে জেপিএ ২.০ বাস্তবায়ন হিসাবে ( ৩.১৫ দেখুন। নেটিভ হাইবারনেট এপিআই দেখুন ), আপনি এটি করবেন:
Session session = entityManager.unwrap(Session.class);
((EntityManagerImpl)em).getSession();