使用复合主键的JPA Select Query会导致异常

时间:2016-08-08 16:48:03

标签: java jpa

我已尝试使用以下代码获取单个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());
}

...

1 个答案:

答案 0 :(得分:1)

为什么不读取异常?并阅读JPA规范?

JPQL语句必须以SELECTUPDATEDELETE开头。除此之外的任何内容都是非法的(由于某种原因,您的开头是FROM)。将SELECT和候选别名放在其前面以获得更多成功机会

HibernateJPQL标准与HQL混合(允许您省略SELECT加别名),但您使用的是OpenJPA,因此您需要使用JPA 1}}兼容查询,除此之外,即使使用Hibernate遵守标准也是一种好习惯!