Spring 数据 JPA 连接 2 个表
Spring Data JPA join 2 tables
我在 MySQL 数据库中有 2 个 table:user
和 user_additional_details
,列如下所述。
用户
- id(自动递增)
- userId(唯一)
- 名字
- 姓氏
- phone
- 电子邮件
用户其他详细信息
- id(自动递增)
- userId(匹配用户中的userId)
- 个人电话
- 个人邮箱
Table user_additional_details
user
table 中的每个用户 ID 包含 0 或 1 行。
但是,数据库没有定义外键约束。理想情况下,user_additional_details
中的列应该作为可空列添加到 user
table 中,但由于某些未知原因没有这样做。现在我需要为以下查询定义实体。
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
我尝试为 table 定义 JPA 实体,但无法弄清楚如何创建使用来自不同 table 的列的实体。
创建 UserEntity(包含来自 User table 的所有列)和 UserAdditionalDetailsEntity(包含来自 user_additional_details table 的所有列)。我假设您知道如何创建 JPA 实体并将它们映射到数据库 table。
我希望您会在 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 annotation 就是您要找的东西
Specifies a secondary table for the annotated entity class. Specifying
one or more secondary tables indicates that the data for the entity
class is stored across multiple tables.
在这里您可以找到有关如何使用它的详细示例 - http://www.thejavageek.com/2014/09/18/jpa-secondarytable-annotation-example/
我在 MySQL 数据库中有 2 个 table:user
和 user_additional_details
,列如下所述。
用户
- id(自动递增)
- userId(唯一)
- 名字
- 姓氏
- phone
- 电子邮件
用户其他详细信息
- id(自动递增)
- userId(匹配用户中的userId)
- 个人电话
- 个人邮箱
Table user_additional_details
user
table 中的每个用户 ID 包含 0 或 1 行。
但是,数据库没有定义外键约束。理想情况下,user_additional_details
中的列应该作为可空列添加到 user
table 中,但由于某些未知原因没有这样做。现在我需要为以下查询定义实体。
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
我尝试为 table 定义 JPA 实体,但无法弄清楚如何创建使用来自不同 table 的列的实体。
创建 UserEntity(包含来自 User table 的所有列)和 UserAdditionalDetailsEntity(包含来自 user_additional_details table 的所有列)。我假设您知道如何创建 JPA 实体并将它们映射到数据库 table。
我希望您会在 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 annotation 就是您要找的东西
Specifies a secondary table for the annotated entity class. Specifying one or more secondary tables indicates that the data for the entity class is stored across multiple tables.
在这里您可以找到有关如何使用它的详细示例 - http://www.thejavageek.com/2014/09/18/jpa-secondarytable-annotation-example/