hibernate - सीतनिद्रा में होना HQL createQuery() list() प्रकार मॉडल को सीधा सीधे




model-view-controller struts2 (2)

पहले POJO वर्ग पर एक कन्स्ट्रक्टर बनाएं।

private class POP_Model {
  String person_name;
  String operation_name;
  String project_name;

  public POP_Model(String person_name, String operation_name, String project_name){
      this.person_name = person_name;
      this.operation_name = operation_name;
      this.project_name = project_name;
  }
}

तो आप उपयोग कर सकते हैं

select new com.server.dtos.POP_Model(p.name, o.name, project.name) 
from Transaction t INNER JOIN t.operation o
INNER JOIN t.person p 
INNER JOIN t.project project  
where p.id=2

संदर्भ के लिए, यहां आधिकारिक दस्तावेज हैं । नए ऑब्जेक्ट के माध्यम से भी एचक्यूएल के साथ जाओ

जब मैं createQuery () के बाद सीतनिद्रा में होना (HQL) की सूची () का उपयोग करता हूं, तो मैं अपनी List<POJO class> को सीधे List<Object[]> टाइप करना चाहता हूं List<POJO class> मैं यहां अपने वास्तविक परिदृश्य का वर्णन करता हूं। मेरे पास 3 सादा पुराने जावा ऑब्जेक्ट हैं, व्यक्ति, ऑपरेशन और प्रोजेक्ट और एक टेबल कहते हैं कि व्यक्ति, ऑपरेशन और प्रोजेक्ट के लिए विदेशी संदर्भों के साथ लेनदेन।

class Person {
  String name;
  // getters and setters
}

class Operation {
  String name;
  // getters and setters
}

class Project {
  String name;
  // getters and setters
}

class Transaction {
  String p_id;
  String o_id;
  String project_id;
  // refers to id of All three table above
}

अब, मैं एक हाइबरनेट क्वेरी लैंग्वेज क्वेरी को निष्पादित करना चाहता हूं String query="select p.name, o.name, project.name from Person p , Operation o, Project project , Transaction t where p.id=2 and p.id=t.p_id and o.id=t.o_id and project.id=t.project_id"

मैंने इस क्वेरी के आउटपुट के लिए मॉडल क्लास बनाया है, POP_Model कहता है।

private class POP_Model {
  String person_name;
  String operation_name;
  String project_name;
}

अब, मैं हाइबरनेट क्वेरी का उपयोग करना चाहता हूं:

Session session=HibernateConnection.getSessionFactory().openSession();
Query q=session.createQuery(query);
List<POP_Model> list=(List<POP_Model>)q.list();

यह टाइपकास्ट त्रुटि देता है जिसमें ऑब्जेक्ट [] को POP_Model में परिवर्तित नहीं किया जा सकता है। मैंने टाइप की गई जांच की है लेकिन इसके लिए एक उदाहरण नहीं मिला। लेकिन जहां तक ​​मुझे पता है, TypedQuery का उपयोग करने के लिए मॉडल POJO नहीं करने के लिए इस्तेमाल किया जा सकता है। मैं सीधे मॉडल में डाली टाइप करना चाहता हूं।


यदि आप इसके लिए हाइबरनेट एपीआई के बजाय जेपीए एपीआई (जो हाइबरनेट भी लागू होते हैं) का प्रयोग कर ठीक हैं, तो आप जेपीयूएल कन्स्ट्रक्टर क्वेरीज़ का उपयोग कर सकते हैं:

List<DTO> dtos = entityManager.createQuery("SELECT NEW com.example.DTO( p.name, o.name) FROM Entity o").getResultList();

संपादित करें यह दिखता है कि सीतनिद्रा में होना इसके साथ ही नियमित एपीआई के साथ कन्स्ट्रक्टर एक्सप्रेशंस को लागू करता है:

List<DTO> dtos = session.createQuery("SELECT NEW com.example.DTO( p.name, o.name) FROM Entity o").list();

ईडीआईटी 2 जेपीए एक जावा ईई मानक है, जो हाइबरनेट और एक्लेप्सेलिंक जैसी विभिन्न दृढ़ता पुस्तकालयों के साथ एकजुट हो रहा है। ऑरेकल ट्यूटोरियल काफी सभ्य है।

आप इस तरह एक गैर- EE अनुप्रयोग में एक EntityManager पुनः प्राप्त कर सकते हैं:

  @PersistenceUnit
  private EntityManagerFactory emf;
  ...
  EntityManager em = emf.createEntityManager();




struts2