[英]Multiple table joins in Spring Data JPA (Spring Boot 2)
我對 Spring Boot 還很陌生。 我正在嘗試加入一堆表並取回一些數據。 我已經為我正在使用的三個表創建了實體和存儲庫。 我正在使用的查詢連接了所有三個表。 我的第一個問題是
下面是我正在使用的 SQL 查詢(本機查詢)。 是否可以從原生查詢轉換為 Spring Data JPA 查詢語言?
SELECT
A.EMPL_ID
, A.HIRE_DT
FROM
HR.EMPLOYEE A WITH(NOLOCK)
INNER JOIN
HR.EMPLOYEE_POS B WITH(NOLOCK)
ON
A.SEQ_NO = B.SEQ_NO
INNER JOIN
HR.EMPLOYEE_ACN C WITH(NOLOCK)
ON
A.SEQ_NO = C.SEQ_NO
WHERE
A.EMPLOYEE_STATUS in ('ACTIVE')
AND B.JOB_GRP='IT'
AND C.ACN IN ('HIRE')
ORDER BY
A.HIRE_DT ASC
我強烈建議使用@Query
或@Query
Native Query
來解決 Spring Data JPA 中的此類問題。
只是為了闡明你的問題,
您應該創建Employee
的 Spring Data JPA 存儲庫。 但另外兩個仍然是Entity
。 存儲庫基本上表示聚合根的集合,這些根又是您的一些實體,您將訪問這些實體並對其他實體強制執行業務約束。 例如,你Employee
組成的EmployeePosition
,該Employee
是聚合根,因為它控制的生命周期EmployeePosition
等。因此您可以定義為雇員而不是為一個存儲庫EmployeePosition
。 因此,到目前為止,並不是您要為其創建存儲庫的所有實體。
您可以使用@Transactional(isolation = Isolation.READ_UNCOMMITTED)
。 但它在交易層面。 在數據庫級別使用@NativeQuery
對此類內容更安全。
由於您已在Entity
定義了所有關系,因此現在您可以直接使用JPA 查詢方法來獲取數據。 您可以使用派生查詢來執行此操作。 類似的東西
List<Employee> findByEmployeePositionAndEmployeeActionAndStatus(EmployeePosition position, EmployeeAction action, String status)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.