当它返回最大 ID 时,我不知道该怎么写。请给我答案。
我在 sessionbean 中写了这个,但它返回-1。
@Override
public int searchMaxAdvID() {
int adid=em.createNativeQuery("select max(AdvID) from Advertisement").getMaxResults();
return adid;
}
您可以尝试以下常规 JPQL 查询,而不是使用本机查询。
Integer maxAdvId = (Integer) em.createQuery("SELECT MAX(a.advID) from Advertisement a").getSingleResult();
问题是您误解了 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 查询。