我已尝试使用以下代码获取单个NotificationSubType对象。但是发现例如" org.apache.openjpa.persistence.ArgumentException:遇到"来自"在角色1,但预期:[" DELETE"," SELECT"," UPDATE"]。"
请帮助我解决问题。 代码如下: ... ...
try {
Query query = this.em.createQuery("from NotificationSubType conc WHERE conc.id.alertTyC = ?1 and conc.id.alertSubTyC = ?2");
query.setParameter(1, "MPPRINT");
query.setParameter(2, "REIN");
NotificationSubType trackIdResLst = (NotificationSubType)query.getSingleResult();
if (null != trackIdResLst) {
System.out.println("TRUE");
} else{
System.out.println("FALSE");
}
} catch (Exception e) {
NotificationLogger.errorWithThrowable(e);
throw new NotificationServiceException(e.getMessage());
}
...
答案 0 :(得分:1)
为什么不读取异常?并阅读JPA
规范?
JPQL
语句必须以SELECT
,UPDATE
或DELETE
开头。除此之外的任何内容都是非法的(由于某种原因,您的开头是FROM
)。将SELECT
和候选别名放在其前面以获得更多成功机会
是Hibernate
将JPQL
标准与HQL
混合(允许您省略SELECT加别名),但您使用的是OpenJPA
,因此您需要使用JPA
1}}兼容查询,除此之外,即使使用Hibernate遵守标准也是一种好习惯!