首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ejb方法中编写“select max(AdvID) from Advertisement”查询?

如何在ejb方法中编写“select max(AdvID) from Advertisement”查询?
EN

Stack Overflow用户
提问于 2012-06-17 12:38:13
回答 2查看 1.6K关注 0票数 0

我不知道返回最大ID时怎么写,请回答。

我在sessionbean中编写了这段代码,但它返回-1。

代码语言:javascript
复制
@Override
    public int searchMaxAdvID() {
        int adid=em.createNativeQuery("select max(AdvID) from Advertisement").getMaxResults();
        return adid;
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-18 01:06:24

问题是您误解了getMaxResults-method。它与MAX函数没有任何连接。正如documentation中所说,它应该按照以下方式运行:

将查询对象设置为检索的最大结果数。如果setMaxResults未应用于查询对象,则返回Integer.MAX_VALUE。

在您的例子中,它似乎返回-1而不是Integer.MAX_VALUE。这显然是不正确的。例如,Hibernate 3.6.8Final返回指定的Integer.MAX_VALUE (2147483647)。方法setMaxResults限制查询返回的最大行数。

在您的例子中,使用getSingleResult是正确的方法。如果表中没有任何行,则result将为null。

代码语言:javascript
复制
Integer x = (Integer) em.createNativeQuery(
      "select max(AdvID) from Advertisement").getSingleResult();

如果没有特定的理由使用原生查询,请按照Nayan Wadekar的回答中的建议使用JPQL查询。

票数 0
EN

Stack Overflow用户

发布于 2012-06-18 00:28:07

您可以尝试下面的常规JPQL查询,而不是使用原生查询。

代码语言:javascript
复制
Integer maxAdvId = (Integer) em.createQuery("SELECT MAX(a.advID) from Advertisement a").getSingleResult();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11068960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档