![](/img/trans.png)
[英]How to perform an upsert on entity with JoinColumn in JPA and Hibernate
[英]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.