[英]Spring Data JPA join 2 tables
我在MySQL數據庫中有2個表: user
和user_additional_details
,下面介紹各列。
用戶
用戶附加詳細信息
表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.