我有一个HQL查询,在实体取消订阅时需要msisdn
和subServiceId
。
以下是相同的代码:
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
任何人都可以指导我如何继续吗?
答案 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