java - hql 从多对一关系表中选择表记录

标签 java hibernate hql

我有这三张 table 。

UserTrackRecord -> id, profile_id(fk), object_profile_id(int)
Profile and -> id
ProfilePersonalInfo-> id, profile_id(fk), firstname, lastname

profile_id和object_profile_id的目的是,当有人向我发送友谊请求时,object_profile_id是我的个人资料ID,外键是发送者的个人资料ID。

一个个人资料有许多用户跟踪记录。 一个配置文件有一个profilepersonalinfo(还有两个表,就像profilepersonalinfo一样,分别是basicinfo和backgroundinfo,profileid为fk)。

我有自己的个人资料 id(objecct_profile_id),比如 1。现在,我想获取请求发送者的名字、姓氏以及其他两个表中的信息。

我做的sql查询是

select utr.profile_profile_id, ppi.dob, ppi.first_name, ppi.last_name, "
                + "pbi.religion, pbi.city_birth, pbi.country_birth from "
                + "user_track_record utr "
                + "inner join profile_personnel_info ppi on ppi.profile_profile_id=utr.profile_profile_id "
                + "inner join profile_background_info pbi on pbi.profile_profile_id=utr.profile_profile_id "
                + "where utr.object_profile_id=1

工作正常。

在hql中,当我最多简化我的查询时,它变成了

Select * from UserTrackRecord utr inner join ProfilePersonalInfo ppi 

但是 id 不起作用,它给了我外部连接或完整连接必须后跟路径表达式查询异常。

我之前发布过同样的问题,但有人投票了:(所以我做了更多的研发,但没有找到解决方案。

最佳答案

我明白为什么这之前被否决了。在发布问题之前,请先阅读 hibernate 文档。

如上所述,hibernate 与实体一起工作,当您在 hibernate 中连接表时,需要提及别名。

Select utr from UserTrackRecord utr inner join utr.profilePersonalInfo ppi and so on......

由于您尚未提供实体,因此我假设 UserTrackRecord 有一个名为 profilePersonalInfo 的属性,其类型为 ProfilePersonalInfo。如果没有,请通过 Hibernate 关联。

关于java - hql 从多对一关系表中选择表记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10863777/

相关文章:

hibernate - 交叉依赖问题:对象引用未保存的 transient 实例,在刷新之前保存 transient 实例

java - 在单元测试中模拟 Controller 标准...grails

带子句的 grails HQL

mysql - 配置单元左外连接条件

java - 找不到类文件

java - 如何在打赏后自动关闭打赏广告[Android-Studio]

java - Android - 停止来自不同类的服务

java - 将数组列表拆分为子列表、对子列表进行排序、执行计算并写入新的 .csv 输出

java - 找不到指定的 JDBC 驱动程序 "com.microsoft.sqlserver.jdbc.SQLServerDriver"类

hadoop - 加入 : space available is below the configured reserved amount 的配置单元查询