Spring Data JPA联接2个表

时间:2018-06-21 04:13:54

标签: java mysql jpa spring-data-jpa persistence

我在MySQL数据库中有2个表:useruser_additional_details,下面介绍各列。

用户

  • id(自动递增)
  • userId(唯一)
  • 名字
  • 姓氏
  • 电话
  • 电子邮件

用户其他详细信息

  • id(自动递增)
  • userId(与用户中的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实体,但无法弄清楚如何创建使用来自不同表的列的实体。

2 个答案:

答案 0 :(得分:0)

创建UserEntity(具有User表中的所有列)和UserAdditionalDetailsEntity(具有user_additional_details表中的所有列)。我假设您知道如何创建JPA实体并将其映射到数据库表。

我希望您可以在spring配置文件中创建实体管理器工厂对象。在创建实体管理器对象的帮助下。

一旦创建了EntutyManager对象:

# make a small sample matrix
m <- matrix(seq(1, 20, by = 1), nrow = 2, ncol = 10)

# apply the diff function to the rows, I expect a 2 by 10 matrix here, should I just transpose it?
apply(m, 1, diff)

   [,1] [,2]
 [1,]    2    2
 [2,]    2    2
 [3,]    2    2
 [4,]    2    2
 [5,]    2    2
 [6,]    2    2
 [7,]    2    2
 [8,]    2    2
 [9,]    2    2

一旦获得resultList,就可以遍历对象数组列表并获取数据。 resultList的每个索引都将包含代表一行的对象数组 请记住,查询中提到的字段名称应与JPA实体中提到的字段名称相同。

答案 1 :(得分:0)

您似乎正在寻找SecondaryTable annotation

  

指定带注释的实体类的辅助表。指定   一个或多个辅助表表明该实体的数据   类存储在多个表中。

在这里找到有关如何使用它的详细示例-http://www.thejavageek.com/2014/09/18/jpa-secondarytable-annotation-example/