Java 如何使用JPQL从多个多通相关实体获取特定字段值?
我是JPA的新手,所以不要对这个可能愚蠢的问题太过严厉,但谷歌没有给我答案 我使用PostreSQL数据库。假设我有实体一,它与实体二(列表二)有Java 如何使用JPQL从多个多通相关实体获取特定字段值?,java,spring,postgresql,jpa,jpql,Java,Spring,Postgresql,Jpa,Jpql,我是JPA的新手,所以不要对这个可能愚蠢的问题太过严厉,但谷歌没有给我答案 我使用PostreSQL数据库。假设我有实体一,它与实体二(列表二)有ManyToOne关系,而实体二又与实体三(列表三)有ManyToOne关系 这三个实体都有自己的ID字段 因此,使用JPQL我尝试执行以下查询: “从一个o中选择o.two.ID,o.two.three.ID,其中o.ID=1 GROUP BY(o.two.ID,o.two.three.ID)” 但我收到的只是内部服务器错误,sqlgrammaree
ManyToOne
关系,而实体二又与实体三(列表三)有ManyToOne
关系
这三个实体都有自己的ID字段
因此,使用JPQL
我尝试执行以下查询:
“从一个o中选择o.two.ID,o.two.three.ID,其中o.ID=1 GROUP BY(o.two.ID,o.two.three.ID)”
但我收到的只是内部服务器错误
,sqlgrammareexception
和SQLState:42803,字符代码:8。
pg_日志中有一条记录,
o.two.ID
必须在groupby
中指定,但它已经存在了。我终于找到了解决方案
我只需要在我的实体中添加OneToMany
反向关系,因此实体Two
必须OneToMany
-与实体One
相关,实体Two
必须OneToMany
与实体Two相关
谢谢大家 不太确定,我相信在分组方式中不需要括号。也许值得一试。刚才注意到您在SELECT中有o.two.three.ID
,在groupby中有o.three.ID
。这些必须匹配。你试过没有组员吗?@Narain Mittal是的,我试过在组员中没有括号,但没有任何改变。对不起,我在写问题的时候把o.three.ID拼错了,实际上是o.three.ID。“我现在要解决这个问题。”是的,我试过不分组。当JPA解析查询时,它没有找到表3。从中只有表1和表2。啊,好旧的反向关系。请将您的答案标记为正确,以便我们知道问题已得到回答:)