ग्रुप द्वारा अनुमान के बिना: इसकी संभव नहीं यह समझ बनाने के रूप में, कई जवाब में आप, पाया हो सकता है, लेकिन ज्यादातर लोगों को, प्रक्षेपण का उपयोग करने की आवश्यकता होती है क्योंकि इससे उन्हें हर विशेषता परियोजना के लिए नहीं करना चाहते हैं, लेकिन आवश्यकता यह है कि एक बीन का अनुमान लगाया जाना चाहिए। (और परिणामस्वरूप लौट आया)। उदाहरण के लिए मैंने परिणामस्वरूप आवश्यक वस्तु के रूप में bean
की कोशिश की है।
मैं चाल का एक छोटा सा मेरा मानना है कि साथ ही परिणाम हासिल किया है, सबसे पहले मैं प्रक्षेपण के बिना द्वारा समूह लागू करने के लिए कोशिश कर रहा था, लेकिन मैं कोई समाधान मिल गया है, तो मैं प्रोजेक्शन पर भरोसा करने के लिए है।
यहाँ मैं क्या
select p.* FROM parent p INNER JOIN child c ON p.id_parent=c.id_father
WHERE c.child_name like '%?%' AND p.parent_name like '%?%'
group by p.id_parent
जावा कोड मैं p.*
चाहता था एक Parent
वर्ग जो मेरे इकाई सेम है होना करने के लिए है और मैं इसे अद्वितीय होना चाहता था में प्राप्त करने के लिए करना चाहता था है, एक तरह से एक में परिणाम सूची प्राप्त है सेट करें, लेकिन मुझे कई कारणों से इस तरह से पसंद नहीं है :)
इसलिए मैंने के बजाय Child.class
से मानदंड बनाया, और यह चाल मेरे लिए काम करती है।
Criteria c = session.createCriteria(Child.class,"c");// starting from Child
c.add(Restrictions.like("childName", "abc", MatchMode.ANYWHERE));
c.createAlias("parent", "p"); //remember parent is an attribute in Child.class
c.add(Restrictions.like("p.parentName", "xyz", MatchMode.ANYWHERE));
c.setProjection(Projections.projectionList().add(Projections.groupProperty("parent"))); //projecting parent which is an attribute of Child.class
List<Parent> result = c.list(); //get the result
for (Parent p: result) {
System.out.println(p);
}
यदि आपको अभी भी यह विचार नहीं मिला है कि मेरे मैप किए गए एंटिटी बीन क्लासेस हैं।
package com.mazhar.beans;
import static javax.persistence.GenerationType.IDENTITY;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name = "parent")
public class Parent {
private Integer idParent;
private String parentName;
private List<Child> childs;
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id_parent")
public Integer getIdParent() {
return idParent;
}
public void setIdParent(Integer idParent) {
this.idParent = idParent;
}
@Column(name = "parent_name")
public String getParentName() {
return parentName;
}
public void setParentName(String parentName) {
this.parentName = parentName;
}
@OneToMany(fetch=FetchType.LAZY, mappedBy="parent", cascade=CascadeType.ALL)
public List<Child> getChilds() {
return childs;
}
public void setChilds(List<Child> childs) {
this.childs = childs;
}
}
और मेरे बच्चे वर्ग
package com.mazhar.beans;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "child")
public class Child {
private Integer idChild;
private String childName;
private Parent parent; //this actually we projected in criteria query.
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id_city", unique = true, nullable = false)
public Integer getIdChild() {
return idChild;
}
public void setIdChild(Integer idChild) {
this.idChild = idChild;
}
@Column(name = "city_name", nullable = false)
public String getChildName() {
return childName;
}
public void setChildName(String cName) {
this.childName = cName;
}
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "id_father")
public Parent getParent() {
return parent;
}
public void setParent(Parent parent) {
this.parent = parent;
}
}
परिभाषा के अनुसार 'ग्रुप बाय', डेटा के एकत्रीकरण में शामिल है, यही कारण है कि अनुमान आवश्यक हैं। शायद यदि आपने टेबल के अधिक विवरण जोड़े हैं, और SQL क्वेरी आप हाइबरनेट उत्पन्न करना चाहते हैं, तो हम बेहतर सलाह दे सकते हैं। – skaffman
मेरे पास एक क्लास इवेंट है। इस वर्ग की तिथियों की एक सूची है। (असल में ये तिथियां एक विशेष श्रेणी डेटवापर हैं, जो तिथि को लपेटती है और एक आईडी जोड़ती है, क्योंकि हाइबरनेट इस समय मूल्य-टाइप किए गए संग्रह में शामिल नहीं हो सकता है)। मैं घटनाओं से पूछताछ करना चाहता हूं और एक्स और वाई के बीच एक या अधिक घटनाओं के साथ सभी घटनाओं को ढूंढना चाहता हूं। जब मैं SQL-क्वेरी को पकड़ता हूं, जो मानदंड-एपीआई द्वारा उत्पन्न किया गया था और "ग्रुप बाय आईडी" जोड़ता है, यह वही करता है, जो मैं ढूंढ रहा हूं। लेकिन मुझे ग्रुप बाय जोड़ने में हाइबरनेट को बहस करने का कोई तरीका नहीं मिल रहा है! –