簡體   English   中英

如何在不查詢實體的情況下對 jpa 的 @ManyToOne JoinColumn 執行“in”查詢

[英]How to perform the "in" query on jpa's @ManyToOne JoinColumn without querying the entity

我有一個實體,如:

@Entity
class Blog{
    @Id
    private Long id;

    // ...
    @ManyToOne
    @JoinColumn(name = "author_id")
    private User author;
}

我想對author列執行“in”查詢,所以我寫了我的BlogRepository如下:

public interface BlogRepository extends JpaRepository<Blog, Long>, CustomizedBlogRepository {

    Page<Blog> findByUserIn(Collection<User> users, Pageable pageable);
}

這是有效的,但是,我需要對一個請求執行兩次查詢,即從UserRepository查詢User實體以獲取Collection<User> users 因為在許多情況下,我想要的只是語義,例如:

select * from blog where author_id in (some_id_list);

那么在 jpa 中有沒有讓我在不查詢User實體的情況下執行如下查詢?

您的方法的Order部分會妨礙您。 由於您不希望對結果進行排序,因此可以使用以下命令:

public interface BlogRepository extends JpaRepository<Blog, Long>, CustomizedBlogRepository {

    Page<Blog> findByUser_IdIn(Collection<Long> userId, Pageable pageable);
}

是的,您也可以編寫自定義 JPQL

公共接口 BlogRepository 擴展 JpaRepository,CustomizedBlogRepository {

@Query("select b from Blog b LEFT JOIN b.author.authorId in :authorIds")
Page<Blog> getByUsersByIds(List<Integer> authorIds, Pageable pageable);

}

在這里,您可以將 authorId 更改為您創建的 User 表的任何 Id。您也可以嘗試JOIN而不是LEFT JOIN

暫無
暫無

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

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