有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JPQL多连接查询

有人能帮我吗? 我得到了那个SQL查询,需要在JPQL中表示它,但我遇到了右连接的问题:

SELECT alrt.* 
FROM 
 REACTION.ALERT alrt, REACTION.INVESTIGATION inv, 
 REACTION.CLASSIFICATION_TYPE clst, REACTION.FRAUD_TYPE frt, 
 REACTION.TRANS trns, REACTION.CARD crd  
WHERE
  alrt.ISS_INST IN(1201, 1101) AND 
  alrt.MODULE_TYPE = 0 AND 
  0 < (SELECT  COUNT(*) FROM REACTION.INVESTIGATION WHERE REACTION.INVESTIGATION.ALERT_ID = alrt.ID) AND 
  inv.CLASSIFICATION_TYPE_ID IS NOT NULL AND 
  clst.CLASSIFICATION_TYPE = 10 AND 
  (alrt.REMINDER_USER_LOGIN = 'qwr' OR alrt.REMINDER_USER_LOGIN IS NULL) AND 
  alrt.ID = inv.ALERT_ID AND 
  alrt.TRANSACTION_ID = trns.ID(+) AND inv.CLASSIFICATION_TYPE_ID = 
  clst.ID AND inv.FRAUD_TYPE_ID = frt.ID(+) AND trns.HPAN = crd.HPAN(+);

阅读教程和文档后,我创建了JPQL查询:

SELECT alrt
    FROM INVESTIGATION inv
        JOIN inv.CLASSIFICATION_TYPE_ID clst
        RIGHT JOIN inv.FRAUD_TYPE_ID frt
        JOIN inv.alert_id alrt
        RIGHT JOIN alrt.transactio_id trns
        RIGHT JOIN trns.HPAN crd
    WHERE
        alrt.ISS_INST IN(1201, 1101) AND
        alrt.MODULE_TYPE = 0 AND 0 < (SELECT COUNT(inv1) FROM INVESTIGATION inv1 WHERE  inv1.ALERT_ID = alrt.ID) AND
        inv.CLASSIFICATION_TYPE_ID IS NOT NULL AND
        clst.CLASSIFICATION_TYPE = 2 AND
       (alrt.REMINDER_USER_LOGIN =  'qwr' OR alrt.REMINDER_USER_LOGIN IS NULL);

但我犯了错误,然后试着执行。有人能告诉我我做错了什么吗? 如果有意义的话,我使用JPA1.0版本


共 (1) 个答案

  1. # 1 楼答案

    您的错误是连接ID,但不是连接或映射对象。 试试这个:

    JOIN inv.CLASSIFICATIONTYPE(your mapping property name) clst
    

    如果实体之间没有映射关系,最好使用用户连接表i.o.或映射。 阅读有关JPQL的更多信息