Получите точно совпадение записи с заданным условием - PullRequest
0 голосов
/ 17 июня 2019

У меня было 2 таблицы, как показано ниже:

public class Type {

    @Column(name = "name")
    private String name;

    @NotAudited
    @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.REMOVE, CascadeType.PERSIST}, orphanRemoval = true)
    @JoinColumn(name = "type_code_id", referencedColumnName = "id")
    private List<TypeList> typeLists;
}
public class TypeList {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "type_id", referencedColumnName = "id")
    private Type type;
    @Column(name = "description")
    private String description;
    @Column(name = "category")
    private String category;

}

И имел спецификацию:

private Specification<Type> searchConditions(final Request request) {
        return  (root, cq, cb) -> {
            Predicate predicate = cb.isNotNull(root.get("id"));

            if (!StringUtils.isEmpty(request.getPattern())) {
                final String pattern = like(request.getPattern());
                final Join<Object, Object> link = root.join("TypeList");
                predicate = cb.and(predicate, cb.or(
                        cb.like(root.get("name"), pattern),
                        cb.like(link.get("description"), pattern),
                        cb.like(link.get("category"), pattern)
                ));
            }
            return predicate;
        };
    }

Когда шаблон доставки работает, он вернет

"types" : [ {
      "name" : "1",
      "id" : "1",
      "typeLists" : [ {
        "id" : "2c0f68ae-7190-11e9-a5a2-12ff1f270001",
        "category" : "Work1",
        "description" : "Work2"
      }, {
        "id" : "2c0f68ae-7190-11e9-a5a2-12ff1f270002",
        "category" : "test",
        "description" : "test"
      } ]
    }, {
      "name" : "2",
      "id" : "2",
      "typeLists" : [ {
        "id" : "773e4245-bcf4-4b51-b3a3-a06558e0be35",
        "category" : "Work",
        "description" : "Work"
      }]
    }
]

Мне не нужна запись ниже:

"id" : "2c0f68ae-7190-11e9-a5a2-12ff1f270002",
        "category" : "test",
        "description" : "test"

Мой ожидаемый результат - просто получить точное совпадение записи с моим шаблоном.

Как я могу проигнорировать это?Если у вас есть решение, пожалуйста, совет.

...