spring数据jpa join 2表

yc0p9oo0  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(332)

我在mysql数据库中有两个表: user 以及 user_additional_details 包含下面描述的列。
用户
id(自动递增)
用户ID(唯一)
名字

电话
电子邮件
用户其他详细信息
id(自动递增)
userid(与user中的userid匹配)
个人电话
个人电子邮件
user_additional_details 中每个用户标识包含0或1行 user table。但是,数据库没有定义外键约束。理想情况下,列 user_additional_details 应在中添加为可为null的列 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实体,但没有弄清楚如何创建使用不同表中的列的实体。

vcudknz3

vcudknz31#

似乎您正在寻找的是secondarytable注解
为带注解的实体类指定辅助表。指定一个或多个辅助表表示实体类的数据跨多个表存储。
在这里你可以找到一个详细的例子如何使用它-http://www.thejavageek.com/2014/09/18/jpa-secondarytable-annotation-example/

t5fffqht

t5fffqht2#

创建userentity(包含user表中的所有列)和useradditionaldetailsentity(包含user\u additional\u details表中的所有列)。我假设您知道如何创建jpa实体并将它们Map到数据库表。
我希望您已经在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实体中提到的字段名相同。

相关问题