J. *_*end 5 java persistence ejbql jpql
我正在使用 oracle10g 数据库和 eclipselink,我需要从表中获取最后插入的键,所以我创建了这个查询
javax.persistence.Query q =
em.createQuery("SELECT nvl(MAX(c.myAtt),0) " +
"from myTable as c");
return Integer.parseInt(q.getSingleResult().toString()); `
Run Code Online (Sandbox Code Playgroud)
但是当表是空的(有时它可能会变空)时,我得到了 ILEGAL ARGUMENT EXCEPTION,原因:JPQL 异常,详细信息:“在 EntityManager 中创建查询时发生异常”。我在做什么错?
解释Apu,“我不知道首先要纠正该问题的哪一部分”:-)
首先,以这种方式检索最后插入的键是一件非常糟糕的事情©它是危险的,效率低下的,最重要的是,不必要的,因为你的JPA已经为你做了:一旦你插入你的实体,它的标识符属性将自动更新为包含其主键。
其次,就您的查询而言,“myTable”不是您在 JPQL 中使用的内容,您需要指定实体名称(例如,如果您将“Car”映射到“CAR_TABLE”,则应该使用“Car”) JPQL 查询中的“CAR_TABLE”)。
最后,NVL()JPQL 不支持。它由EclipseLink Expressions支持(某种程度上通过Expression.ifNull())。无论如何,在这种情况下您并不需要它。