मैं जेपीए 2.0 का उपयोग कर रहा हूं। हाइबरनेट 4.1.0. फ़ाइनल, और जावा 6. मैं निम्नलिखित psuedo-SQL से जेपीए क्वेरी कैसे लिखूं?मैं जेपीए 2.0 में कहां से एक खंड के साथ एक MAX क्वेरी लिखूं?
select max(e.dateProcessed) from Event e where e.org = myOrg
और मेरे डोमेन वस्तु ऐसा दिखाई देता है:
@GenericGenerator(name = "uuid-strategy", strategy = "org.mainco.subco.core.util.subcoUUIDGenerator")
@Entity
@Table(name = "sb__event",
uniqueConstraints = { @UniqueConstraint(columnNames={"EVENT_ID"}) }
)
public class Event
{
@Id
@Column(name = "ID")
@GeneratedValue(generator = "uuid-strategy")
private String id;
@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.REMOVE})
@JoinColumn(name = "ORGANIZATION_ID", nullable = false, updatable = true)
private Organization org;
@Column(name = "DATE_PROCESSED")
@NotNull
private java.util.Date dateProcessed;
मुझे पता है कि CriteriaBuilder.greatest शामिल है, लेकिन मैं तो बस को समझ नहीं सकता कैसे क्वेरी लिखने के लिए। यह संगठन से मेल खाने वाली सभी घटना वस्तुओं को वापस कर देगा, लेकिन जहां तक मुझे मिल गया है।
final CriteriaBuilder builder = m_entityManager.getCriteriaBuilder();
final CriteriaQuery<Event> criteria = builder.createQuery(Event.class);
final Root<Event> event = criteria.from(Event.class);
criteria.select(event);
criteria.where(builder.equal(Event.get("org"), org));
results.addAll(m_entityManager.createQuery(criteria).getResultList());
जब से मैं एक "java.util.Date वापस जाने के लिए चाहते हैं, "मुझे लगता है कि मैं लाइन बदलता हूं" CriteriaQuery cq = qb.createQuery (Number.class); " "CriteriaQuery सीक्यू = qb.createQuery (Date.class);"। किसी भी तरह से, मुझे लाइन पर संकलन त्रुटि मिल रही है "cq.select (qb.max (root.get (" dateProcessed "));"। यह कहता है "बाउंड मिस्चैच: जेनेरिक विधि अधिकतम (अभिव्यक्ति ) प्रकार का मानदंडबिल्डर (पथ
मैंने नहीं किया ध्यान दें कि मैक्स केवल अभिव्यक्ति लेता है, जो जेपीक्यूएल अधिकतम अभिव्यक्ति से अलग है जो किसी भी पथ अभिव्यक्ति को स्वीकार करेगा। यह प्रश्न में शामिल है http://stackoverflow.com/questions/9616390/select-max-timestamp-with-jpa2-criteria-api –
Chris
जब मैंने "महानतम" ('root.get ("dateProcessed") को बदल दिया 'root.get (Event_.dateProcessed)') सबकुछ बढ़िया काम करता है। – Dave