में MAX() का उपयोग करके SELECT क्वेरी के साथ सही मान प्राप्त करने में असमर्थ, मैं जेपीए में नया हूं और जब मैं MAX() फ़ंक्शन का उपयोग कर डेटाबेस से क्वेरी करने का प्रयास करता हूं तो मुझे कोई समस्या है। मेरे फ़ंक्शन का कोड निम्न है। क्या कोई मेरी मदद कर सकता है? धन्यवाद।जेपीए
public int getMaxId(){
entityManager = this.entityManagerFactory.createEntityManager();
Query query = entityManager.createQuery("SELECT * FROM user WHERE id = (SELECT MAX(u.id) FROM user u)");
User user = (User) query.getSingleResult();
int id = user.getId();
return id;
}
मैं जेपीए, टॉपलिंक और अपाचे डर्बी का उपयोग कर रहा हूं। मेरी विधि तालिका उपयोगकर्ताओं की अधिकतम आईडी वापस करनी चाहिए।
संपादित करें: मैं एक सेवा से कि फ़ंक्शन को कॉल करें:
try {
int id = userDAO.getMaxId();
logger.info("Max id: " + id);
user.setId(id+1);
}
catch (Exception ex){
logger.error("Unable to get the max id.");
}
user.setId()
का मूल्य हमेशा '0' है।
संपादित करें (2): लॉग इन करें
Caused by: Exception [EclipseLink-8034] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Error compiling the query [SELECT u FROM user u WHERE u.id = (SELECT MAX(uu.id) FROM user uu)]. Unknown entity type [user].
at org.eclipse.persistence.exceptions.JPQLException.entityTypeNotFound(JPQLException.java:483)
at org.eclipse.persistence.internal.jpa.parsing.ParseTreeContext.classForSchemaName(ParseTreeContext.java:138)
at org.eclipse.persistence.internal.jpa.parsing.SelectNode.getClassOfFirstVariable(SelectNode.java:327)
at org.eclipse.persistence.internal.jpa.parsing.SelectNode.getReferenceClass(SelectNode.java:316)
at org.eclipse.persistence.internal.jpa.parsing.ParseTree.getReferenceClass(ParseTree.java:436)
at org.eclipse.persistence.internal.jpa.parsing.ParseTree.adjustReferenceClassForQuery(ParseTree.java:75)
at org.eclipse.persistence.internal.jpa.parsing.JPQLParseTree.populateReadQueryInternal(JPQLParseTree.java:103)
at org.eclipse.persistence.internal.jpa.parsing.JPQLParseTree.populateQuery(JPQLParseTree.java:84)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:219)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:190)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:142)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:126)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1475)
... 35 more
मेरे इकाई User
इस प्रकार घोषित किया जाता है:
@Entity
@Table(name = "user")
public class User {
@Id
private int id;
private String name;
private String lastName;
private String city;
private String password;
मैं जेनरेट किए गए आईडी मानों का उपयोग करने का सुझाव देता हूं। – JMelnik
आपको अपवाद को निगलना नहीं चाहिए, अधिक जानकारी के लिए पूर्ण त्रुटि स्टैक मुद्रित करने के लिए 'ex.printStackTrace()' का उपयोग करने का प्रयास करें। –
@JMelnik हाँ, मैं सहमत हूं लेकिन मैं समझना चाहता था कि कैसे जेपीए/जेपीक्यूएल लगातार निरंतर पूछताछ और प्रश्नों का उपयोग करने की कोशिश कर रहा है। – Spacemonkey