在HqlNamedParams中,如果where条件未产生结果,则获取所有行

在HqlNamedParams中,如果where条件未产生结果,则获取所有行,hql,Hql,在这里,若表中不存在“值”,则获取所有行 我怎么做?我误解了这个问题,现在我编辑我的答案: 您必须运行两个查询 StringBuilder query = new StringBuilder("from country "); query.append("and stateId in (:stateId)"); hqlNamedParam.addParamAndValue("stateId", values); 或者(但您使用更多带有count的子查询) 恐怕你们误解了OP,它说“若表中不存在

在这里,若表中不存在“值”,则获取所有行


我怎么做?

我误解了这个问题,现在我编辑我的答案:

您必须运行两个查询

StringBuilder query = new StringBuilder("from country ");
query.append("and stateId in (:stateId)");
hqlNamedParam.addParamAndValue("stateId", values);
或者(但您使用更多带有count的子查询)


恐怕你们误解了OP,它说“若表中不存在“值”,那个么获取所有行”。我将其解释为“如果原始查询没有返回任何内容,因为给定的stateid没有出现在country表中,那么在没有stateid where子句的情况下再次运行查询”谢谢你的回复,我关心的是我仍然应该去搜索数据库,如果他们不在数据库中,我必须考虑所有其他。@ BPGEGGO:嗯,我误解了OP。现在我试着给我答案。谢谢,你能详细说明一下“如果”值是否存在于表中,取走所有行。“你到底是什么意思?”BPGEGGO在这里,我必须做最好的匹配,如果价值在那里,我会考虑其他的,我必须与我所拥有的!请写出语法,我在那里出错了@拉古·钱德拉:嗨,看到我最新的答案了吗
// The first:

StringBuilder query = new StringBuilder("from country ");
query.append("and stateId in (:stateId)");
hqlNamedParam.addParamAndValue("stateId", values);

// The second (only if the first doesn't return rows)

if (outList == null || outList.size == 0) {
    StringBuilder query2 = new StringBuilder("from country ");
}
StringBuilder query = new StringBuilder("from country ");
query.append(" where 
    (select count(c2.id) from country c2 where c2.stateid in (:stateId)) > 0
    and cs.stateid in (:stateId)
    or (select count(c3.id) from country c3 where c3.stateid in (:stateId)) = 0");
hqlNamedParam.addParamAndValue("stateId", values);