java – 在JPA中使用MAX()无法使用SELECT查询获得正确的值
发布时间:2020-12-15 02:54:05 所属栏目:Java 来源:网络整理
导读:我是JPA的新手,当我尝试使用MAX()函数查询数据库时遇到问题. 我的功能代码如下.谁能帮我?谢谢. public int getMaxId(){ entityManager = this.entityManagerFactory.createEntityManager(); Query query = entityManager.createQuery("SELECT * FROM user W
我是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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – Jersey是否支持美元符号JAX-RS的Path注释?
- java – 难得的时间低估检查和未检查的异常
- Java多线程的同步机制:synchronized
- java – 在hibernate统计中,load和fetch之间有什么区别?
- 手工实现hashset
- Java Swing – UI Freezing
- java – 如何在NetBeans中控制JButton HTML文本的居中?
- java – Spring MVC中Controller和Handler有什么区别?
- 无法读取输入文件 – 读取jar文件中包含的图像 – java
- 异常: The server time zone value 'ÖÐ