Java,CriteriaBuilder,使用可选参数“ where”

我必须重写一些代码,但是无法在Internet上找到正确的信息。原始部分如下所示:

String query = "select * from sublog_type_map_v where 1 = 1";
if (responsibleGroupId != null && responsibleGroupId.length() != 0 && !responsibleGroupId.equals("0")) {
    query += " and responsible_group_id = " + responsibleGroupId;
}
if (categoryId != null && categoryId.length() != 0 && !categoryId.equals("0")) {
    query += " and category_id = " + categoryId;
}
if (typeId != null && typeId.length() != 0 && !typeId.equals("0")) {
    query += " and type_id = " + typeId;
}
if (subtypeId != null && subtypeId.length() != 0 && !subtypeId.equals("0")) {
    query += " and subtype_id = " + subtypeId;
}

我已经进行了这段代码:

CriteriaBuilder builder = entityManager.getcriteriaBuilder();
CriteriaQuery<SublogTypeMapV> query = builder.createQuery(SublogTypeMapV.class);
Root<SublogTypeMapV> root = query.from(SublogTypeMapV.class);
query.select(root).where(builder.equal(root.get("responsibleGroupId"),responsibleGroupId));

但是,使用“ if”表达式以及其他三个参数(稍后将添加)将其视为“可选”。我不知道该怎么做,有人可以帮我吗?

hgjsjbyhj 回答:Java,CriteriaBuilder,使用可选参数“ where”

我想这将满足需要-

CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<SublogTypeMapV> query = builder.createQuery(SublogTypeMapV.class);
Root<SublogTypeMapV> root = query.from(SublogTypeMapV.class);
query = query.select(root);
if("some boolean expression") {
    query = query.where(builder.equal(root.get("responsibleGroupId"),responsibleGroupId));
}

您可以轻松地处理内部的其他条件。

本文链接:https://www.f2er.com/2854699.html

大家都在问