簡體   English   中英

Spring數據規范,如何在LIKE中查詢@OneToMany關系?

[英]Spring Data Specifications, how to query LIKE for a @OneToMany relationship?

我有一個名為“客戶端”的實體,其中包含一個列表用戶。

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();

您可以在這里找到更多關於此的信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM