簡體   English   中英

使用QueryDSL和Spring的Repository編寫跨表查詢

[英]Write cross-table queries with QueryDSL and Spring's Repository

我已經構建了一個DAL,它使用Spring的存儲庫通過Hibernate和JPA管理MySQL DB上的CRUD操作。 特別是這是我的Repository定義

package my.dal.repository;

import my.domain.dal.User;

import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;


@Repository
public interface IUserRepository extends CrudRepository<User, String>, QueryDslPredicateExecutor<User>{

}

通過這個定義,我可以通過QueryDslPredicateExecutor接口和findAll(Predicate)方法的擴展,使用QueryDSL Predicates執行CRUD操作。

我面臨的問題是,這種方式我無法進行跨表查詢。 實際上,我不能使用QueryDSL的連接工具,因為我沒有HibernateQuery

使用Spring Repositories和QueryDSL實現連接操作的正確方法是什么?

謝謝

解決了。

下面我將編寫使用Spring Repositories執行QueryDSL查詢所需的步驟

  1. 獲取EntityManager通過添加在應用程序上下文中使用EntityManager在屬性Service與類@PersistenceContext注釋

     @PersistenceContext EntityManager em; 

    這樣,em屬性將鏈接到Spring應用程序上下文中定義的EntityManager bean。

  2. 實例化JPAQuery對象並使用它

     QUser qUser = QUser.user; JPQLQuery query = new JPAQuery(em); User charlie = query .from(qUser) .where(qUser.username.eq("charlie")) .uniqueResult(qUser); 

現在我們可以使用JPQLQuery對象在不同的​​表上執行連接。

希望這可以幫助

暫無
暫無

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

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