0

当它返回最大 ID 时,我不知道该怎么写。请给我答案。

我在 sessionbean 中写了这个,但它返回-1。

@Override
    public int searchMaxAdvID() {
        int adid=em.createNativeQuery("select max(AdvID) from Advertisement").getMaxResults();
        return adid;
    }
4

2 回答 2

0

您可以尝试以下常规 JPQL 查询,而不是使用本机查询。

Integer maxAdvId = (Integer) em.createQuery("SELECT MAX(a.advID) from Advertisement a").getSingleResult();
于 2012-06-17T16:28:07.463 回答
0

问题是您误解了 getMaxResults 方法。它与函数没有任何联系MAX。如文档中所述,它的行为方式应如下:

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

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

在您的情况下, getSingleResult是正确的使用方法。如果表中没有任何行,则结果将为空。

Integer x = (Integer) em.createNativeQuery(
      "select max(AdvID) from Advertisement").getSingleResult();

如果没有使用本机查询的具体原因,请按照 Nayan Wadekar 的回答中的建议使用 JPQL 查询。

于 2012-06-17T17:06:23.977 回答