У меня было 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"
Мой ожидаемый результат - просто получить точное совпадение записи с моим шаблоном.
Как я могу проигнорировать это?Если у вас есть решение, пожалуйста, совет.