簡體   English   中英

Spring Data JPA 中的多表連接(Spring Boot 2)

[英]Multiple table joins in Spring Data JPA (Spring Boot 2)

我對 Spring Boot 還很陌生。 我正在嘗試加入一堆表並取回一些數據。 我已經為我正在使用的三個表創建了實體和存儲庫。 我正在使用的查詢連接了所有三個表。 我的第一個問題是

  1. 由於查詢連接了所有三個表,我應該將這個方法保留在哪個存儲庫類中?
  2. 查詢有 NOLOCK。 JQL 支持嗎?
  3. 我擁有的三個實體是 Employee.java、EmployeePosition.java 和 EmployeeAction.java。

下面是我正在使用的 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 中的此類問題。

只是為了闡明你的問題,

  1. 您應該創建Employee的 Spring Data JPA 存儲庫。 但另外兩個仍然是Entity 存儲庫基本上表示聚合根的集合,這些根又是您的一些實體,您將訪問這些實體並對其他實體強制執行業務約束。 例如,你Employee組成的EmployeePosition ,該Employee是聚合根,因為它控制的生命周期EmployeePosition等。因此您可以定義為雇員而不是為一個存儲庫EmployeePosition 因此,到目前為止,並不是您要為其創建存儲庫的所有實體。

  2. 您可以使用@Transactional(isolation = Isolation.READ_UNCOMMITTED) 但它在交易層面。 在數據庫級別使用@NativeQuery對此類內容更安全。

  3. 由於您已在Entity定義了所有關系,因此現在您可以直接使用JPA 查詢方法來獲取數據。 您可以使用派生查詢來執行此操作。 類似的東西

List<Employee> findByEmployeePositionAndEmployeeActionAndStatus(EmployeePosition position, EmployeeAction action, String status)

暫無
暫無

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

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