我不知道如何在返回最大ID时写入。请给我答案。
我在sessionbean中写了这个,但它返回-1。
@Override
public int searchMaxAdvID() {
int adid=em.createNativeQuery("select max(AdvID) from Advertisement").getMaxResults();
return adid;
}
答案 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查询。