Spring 数据规范,@OneToMany 关系如何查询LIKE?
Spring Data Specifications, how to query LIKE for a @OneToMany relationship?
我有一个名为 "Client" 的实体,其中包含一个用户列表。
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 user = new User();
// set properties
queryPredicates.add(cb.isMember(user, root.<Collection<User>>get("users")));
我可以这样做:
Path<List<User>> users = root.<List<User>>get("users");
然后呢?
谢谢,
约阿希姆
解决方案可能在用户端,即在 UserRepository 中:
findByClientAndRoleAndNameLike(Client client, String role, String name)
您可以使用 JPA 实体管理器查询来执行类似的操作:
List<Client> clients = (List<Client>) entityManager
.createQuery(
"select c from Client c join c.users u where u.role='ADMISTRATOR' and u.name like :name")
.setParameter("name", "foo").getResultList();
您可以找到更多相关信息here
我有一个名为 "Client" 的实体,其中包含一个用户列表。
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 user = new User();
// set properties
queryPredicates.add(cb.isMember(user, root.<Collection<User>>get("users")));
我可以这样做:
Path<List<User>> users = root.<List<User>>get("users");
然后呢?
谢谢, 约阿希姆
解决方案可能在用户端,即在 UserRepository 中:
findByClientAndRoleAndNameLike(Client client, String role, String name)
您可以使用 JPA 实体管理器查询来执行类似的操作:
List<Client> clients = (List<Client>) entityManager
.createQuery(
"select c from Client c join c.users u where u.role='ADMISTRATOR' and u.name like :name")
.setParameter("name", "foo").getResultList();
您可以找到更多相关信息here