2014-07-08 33 views
2

我需要編寫一個選擇查詢來從Spring Data Repository圖層中的多個表中獲取數據。我知道我們可以使用@Query來編寫自定義查詢,但是它僅返回單個表中的值?在Spring數據中選擇多個表

SELECT s.service_id, s.name, us.rating_id 
FROM services s, 
    ratings r, 
    user_services us 
where 
    us.service_id = s.service_id and 
    us.rating_id = r.rating_id and 
    us.user_id= ?; 
+0

我認爲所選答案(http://stackoverflow.com/a/2359214/217324)對於我挑選的一個模型來說明了你正在尋找的確切案例。 –

+0

@NathanHughes我的問題不是關於JPQL,關於如何將JPQL集成到Spring Data Respository中,我嘗試了第一種搜索引擎的方法,但是我看起來類似。 –

+0

重新打開。如果你能找到一種方法來重新解釋這個問題,使之更加清晰,那可能會有所幫助。我仍然不明白這個關聯的問題是不夠的。 –

回答

4

你的接口方法可以使用本機SQL來選擇從多個表中的列,並且該方法將返回對象陣列的列表:

public interface MyRepository extends JpaRepository { 
    @Query(name = [name], nativeQuery = true) 
    List<Object[]> methodThatQueriesMultipleTables(); 
} 

在列表中的每個項目都是對象數組,它是一個行數據

您還可以創建自定義存儲庫實現:

How to add custom method to Spring Data JPA

@NoRepositoryBean 
public interface CustomRepository<[Your object]> { 
    List<Object[]> methodThatQueriesMultipleTables(); 
} 

public class MyRepositoryImpl<[Your object]> implements CustomRepository<[Your object] { 
    @PersistenceContext 
    private EntityManager entityManager; 

    @Override 
    public List<Object[]> methodThatQueriesMultipleTables() { 
     //use JPA query to select columns from different tables 
     Query nativeQuery = entityManager.createNativeQuery("query"); 
     return query.getResultList(); 
    } 
} 
+1

對於我得到的第一種方法:org.springframework.beans.factory.BeanCreationException:創建名爲'individualProviderServicesRepository'的bean時出錯:init方法的調用失敗;嵌套異常是java.lang.IllegalArgumentException:不是託管類型:類java.lang.Object' –

+0

第二種方法在使用它一段時間後仍然有效。謝謝。 –

+0

不看代碼很難弄清楚,但我很高興你能解決你的問題。 – souser