У меня есть объект под названием «Клиент», который содержит пользователей списка.Весенние характеристики данных, как запросить LIKE для отношений @OneToMany?
public class Client {
@OneToMany(fetch = FetchType.EAGER, mappedBy="client")
private List<User> users;
}
Я хочу написать запрос, который делает что-то вроде:
SELECT *
FROM Client client
JOIN Users user
ON user.client_id = client.client_id
WHERE (user.name LIKE '%name%' AND user.role = 'ADMINISTRATOR')
Кто-нибудь знает, как это сделать с помощью спецификации?
Обычно, если бы был один пользователь, я бы сделал что-то вроде этого ниже. Но поскольку у нас есть Список, я не уверен, как подойти к этой ситуации.
Path<User> user = root.<User> get("user");
queryPredicates.add(cb.like(cb.upper(user .<String>get("name")), getLikePattern(queryString)));
queryPredicates.add(cb.like(cb.upper(user .<String>get("role")), "ADMINISTRATOR));
Если бы я хотел сравнить с равным, я мог бы построить объект пользователя и сделать что-то вроде этого:
User user = new User();
// set properties
queryPredicates.add(cb.isMember(user, root.<Collection<User>>get("users")));
я мог бы сделать что-то вроде:
Path<List<User>> users = root.<List<User>>get("users");
Но что ?
Спасибо, Joachim
ca Не делать это на стороне пользователя? – Jaiwo99
А, да, это можно сделать. Но мне пришлось бы объединить два списка результатов вместо одной спецификации. Позвольте мне попробовать –