我是JPA的新手,当我尝试使用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; }
我正在使用JPA,TopLink和Apache Derby.我的方法应该返回表用户的最大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;
解决方法
您可以直接使用更简单的JPQL
return (Integer)entityManager.createQuery("select max(u.id) from User u").getSingleResult();
或者使用TypedQuery
return entityManager.createQuery("select max(u.id) from User u",Integer.class).getSingleResult();
编辑:
Unknown entity type [user]
您应该使用User而不是user.