সত্তা-পরিচালক থাকলে আমি কীভাবে সেশনটি পেতে পারি


107

আমার আছে

private EntityManager em;

public List getAll(DetachedCriteria detachedCriteria)   {

    return detachedCriteria.getExecutableCriteria("....").list();
}

আমি সত্তাটি ব্যবহার করতে চাইলে আমি কীভাবে অধিবেশনটি পুনরুদ্ধার করতে পারি বা কীভাবে আমি আমার বিচ্ছিন্ন মানদণ্ড থেকে ফলাফল পেতে পারি?


আরও দেখুন((EntityManagerImpl)em).getSession();
অ্যাশলে

উত্তর:


181

সম্পূর্ণরূপে অবসন্ন হওয়ার জন্য, আপনি যদি 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);

1
entityManager.unwrap(Session.class);কি Sessionমধ্যে Session.class? এটা কি আমদানি?
থ্যাং ফাম

জেপিএ বাস্তবায়নের উপর নির্ভর করে, যদি আপনি এটি গ্রহপরিবর্তন ব্যবহার করেনorg.eclipse.persistence.sessions.Session
আলবসিফ

41

অধ্যায় "দেখ । JPA থেকে 5.1 অ্যাক্সেস হাইবারনেট API গুলি " এ হাইবারনেট ORM ইউজার গাইড :

Session session = entityManager.unwrap(Session.class);

entityManager.unwrap(Session.class);কি Sessionমধ্যে Session.class? এটা কি আমদানি?
থ্যাং ফাম

2
হাইবারনেট ম্যানুয়াল পরিবর্তিত হয়েছে। পয়েন্ট 15.8 আর সেশন পাওয়ার সম্পর্কে কোনও তথ্য দেয় না।
নিকটার

1
জানুয়ারী, 2019 পর্যন্ত, হাইবারনেট কারেন্ট (5.3.7) ম্যানুয়াল, §5.1, এখনও এটি একটি সেশন অবজেক্টের রেফারেন্স পাওয়ার উপায় হিসাবে বর্ণনা করে।
আলাইন BECKER


0

সত্তা ম্যানেজার থেকে সেশন পেতে 'MMantage.unwrap (Session.class)' ব্যবহৃত হয়।

@Repository
@Transactional
public class EmployeeRepository {

  @PersistenceContext
  private EntityManager entityManager;

  public Session getSession() {
    Session session = entityManager.unwrap(Session.class);
    return session;
  }

  ......
  ......

}

ডেমো অ্যাপ্লিকেশন লিঙ্ক


-1

আমি ওয়াইল্ডফ্লাইতে কাজ করছিলাম তবে আমি ব্যবহার করছিলাম

org.hibernate.Session session = ((org.hibernate.ejb.EntityManagerImpl) em.getDelegate()).getSession();

এবং সঠিক ছিল

org.hibernate.Session session = (Session) manager.getDelegate();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.