如何在 HQL 中应用 OR 条件?

How to apply OR Condition in HQL?

我有一个 HQL 查询,在实体退订上使用 msisdnsubServiceId

下面是相同的代码:

Query query = session.createSQLQuery(unsubscriptionInfodemo)
                .addEntity(Unsubscription.class)
                .setParameter("msisdn", msisdn)
                .setParameter("subServiceId", subServiceId);

现在,我需要在这个 Unsubscription 实体中检查 subServiceId 是我已经通过的 subServiceId 还是应该是我硬编码的 subServiceId

我可以申请吗

public void checkUser(String msisdn,String subServiceID){
Query query = session.createSQLQuery(unsubscriptionInfodemo)
                .addEntity(Unsubscription.class)
                .setParameter("msisdn", msisdn)
                .setParameter("subServiceId", subServiceId)
                .setParameter("subServiceId", "XYZ");
}

HQL 查询:

unsubscriptionInfodemo=select * from unsubscription s where s.msisdn=:msisdn and s.subservice_id=:subServiceId

Can anyone guide me how to proceed?

如果不更改hql字符串,您想要实现的动态功能无法通过hql完成。

我会考虑使用提供动态功能的 criteria api

最简单的方法是根据值创建 hql 字符串(如果 subServiceId 存在或不存在)或使用条件 api,因此您只需添加一个额外的 equals 过滤器以防万一存在 subServiceId。

应该将问题更改为如何根据变量存在向 hql 添加动态条件。

同时勾选 this answer

How to apply OR Condition in HQL?

在您的查询中使用 OR

select * from unsubscription s where s.msisdn=:msisdn and s.subservice_id=:subServiceId OR 
s.subservice_id=:subServiceId2

和名称参数不应该相同:

.setParameter("msisdn", msisdn)
.setParameter("subServiceId", subServiceId)
.setParameter("subServiceId2", "XYZ"); // Make this subServiceId2