簡體   English   中英

Spring Data JPA聯接2個表

[英]Spring Data JPA join 2 tables

我在MySQL數據庫中有2個表: useruser_additional_details ,下面介紹各列。

用戶

  • id(自動遞增)
  • userId(唯一)
  • 名字
  • 電話
  • 電子郵件

用戶附加詳細信息

  • id(自動遞增)
  • userId(與User中的userId匹配)
  • 個人電話
  • 私人郵箱

user_additional_details對於user表中的每個userId包含0或1行。 但是,數據庫沒有定義外鍵約束。 理想情況下,應該將user_additional_details列添加為user表中的可空列,但是由於某些未知的原因而沒有這樣做。 現在,我需要為以下查詢定義實體。

select user.userId, user.phone, user_a_d.personalPhone
from user
join user_additional_details as user_a_d
    on user.userId = user_additional_details.userId

我嘗試為表定義JPA實體,但無法弄清楚如何創建使用來自不同表的列的實體。

創建UserEntity(具有User表中的所有列)和UserAdditionalDetailsEntity(具有user_additional_details表中的所有列)。 我假設您知道如何創建JPA實體並將其映射到數據庫表。

我希望您可以在spring配置文件中創建實體管理器工廠對象。 借助該創建實體管理器對象。

創建EntutyManager對象后:

Query q= em.createQuery("select user.userId, user.phone, userDetails.personalPhone
from UserEntity user
join UserAdditionalDetailsEntity as userDetails
    on user.userId = userDetails.userId");
List<Object[]> resultList= q.getResultList();

一旦獲得了resultList,就可以遍歷對象數組的列表並獲取數據。 resultList的每個索引都將包含表示一行的對象數組。請記住,查詢中提到的字段名稱應與JPA實體中提到的字段名稱相同。

看起來SecondaryTable注釋正是您要尋找的

指定帶注釋的實體類的輔助表。 指定一個或多個輔助表指示實體類的數據存儲在多個表中。

在這里,您可以找到有關使用方法的詳細示例-http: //www.thejavageek.com/2014/09/18/jpa-secondarytable-annotation-example/

暫無
暫無

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

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