@Formula - Hibernate 中本地查询语法错误

3

我有一个FullProduct 和 PartValue之间的一对多关系(一个Full Product有很多PartValue)

我尝试使用下面的@Formula注释-语法似乎是正确的,因为我在命令行中运行它并给出了正确的结果。

@Formula("select sum(pv.total_value) from part_value pv inner join full_product fp on fp.full_product_id=pv.full_product_id")
private Float totalAmount;

然而,当我在Spring JPA/Hibernate中运行它时,我遇到了以下错误:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select sum(pv.total_value) from part_value pv inner join full_product fp on fp.full_product_id=pv.full_product_id' at line 1
错误日志中没有其他信息,看起来这是正确方向。
我很困惑——如果命令行中的SQL语法没有问题,为什么Spring/Hibernate会报错。有人能帮忙吗?
感谢任何指点。
1个回答

7

尝试为子查询添加()

@Formula("(select sum(pv.total_value) from part_value pv inner join full_product fp on fp.full_product_id=pv.full_product_id)")
private Float totalAmount;

由于它被翻译成类似于

select
  entityAlias1.field1,
  entityAlias1.field2,
  ...
  (select sum(pv.total_value) from part_value pv inner join full_product fp on fp.full_product_id=pv.full_product_id),
  ...
from the_entity_table entityAlias1
...

没有使用 (),语法是错误的。

那太完美了,速度也很快!只是为了我的理解,你是手动输入翻译的还是使用了某些工具生成的? - HopeKing
它是手动输入的。但你可以将show_sql切换为真,查看实际执行的SQL查询。 - StanislavL
是的,我注意到了。好奇因为你的翻译非常流畅 :)。再次感谢。 - HopeKing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接