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

时间:2012-06-17 04:38:13

标签: jpa ejb-3.0 jpql

我不知道如何在返回最大ID时写入。请给我答案。

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

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

2 个答案:

答案 0 :(得分:0)

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

Integer maxAdvId = (Integer) em.createQuery("SELECT MAX(a.advID) from Advertisement a").getSingleResult();

答案 1 :(得分:0)

问题是您误解了getMaxResults方法。它与MAX函数没有任何关联。如documentation中所述,它应该遵循以下方式:

  

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

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

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

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

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