如何在HQL中应用OR Condition?

时间:2017-09-05 08:39:24

标签: java hibernate 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
  

任何人都可以指导我如何继续吗?

2 个答案:

答案 0 :(得分:0)

  

如何在HQL中应用OR条件?

在您的查询中使用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

答案 1 :(得分:-1)

在不更改hql字符串的情况下,无法使用hql完成要实现的动态功能。

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

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

应该根据变量存在来改变关于如何向hql添加动态条件的问题。

同时检查this answer