Java 正确查询的MysqlSyntaxError

Java 正确查询的MysqlSyntaxError,java,mysql,hibernate,jdbc,Java,Mysql,Hibernate,Jdbc,在我的玩家实体中,我试图使用一个公式来计算所有玩家的得分总和 导入javax.persistence.Column; 导入javax.persistence.Entity; 导入javax.persistence.Id; 导入org.hibernate.annotations.Formula; 导入com.google.gwt.user.client.rpc.IsSerializable; @实体 公共类播放器实现IsSerializable{ @身份证 私有字符串名称; @Columnnull

在我的玩家实体中,我试图使用一个公式来计算所有玩家的得分总和

导入javax.persistence.Column; 导入javax.persistence.Entity; 导入javax.persistence.Id; 导入org.hibernate.annotations.Formula; 导入com.google.gwt.user.client.rpc.IsSerializable; @实体 公共类播放器实现IsSerializable{ @身份证 私有字符串名称; @Columnnullable=false 私人整数分; @Formulavalue=选择sumscore 私有整数totalScore=0; [...] } 但是,在加载播放器时,我收到一个syntaxerror

Caused by: 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(this_.score)  as formula0_0_ from Player this_' at line 1
奇怪的是,这个查询看起来完全有效,当我在与hibernate相同的数据库上运行它时,我得到了预期的结果

从该玩家中选择sumthis。得分为公式0_ 返回1行 我已将hibernate设置为使用mysql方言

org.hibernate.dialogue.mysqldialogue com.mysql.jdbc.Driver 为什么jdbc会为正确的查询抛出错误?

看起来

@Formula(value = " SELECT sum(score) ") 
应该是

@Formula(value = " sum(score) ") 
相反。可能我还没有尝试过发送到MySQL的SQL查询是

SELECT SELECT sum(this_.score) as formula0_0_ from Player this_
这显然是无效的

MySQL只显示它遇到错误时的SQL字符串。在您的情况下,这是没有帮助的,因为从这一点开始,您就有了一个有效的SQL查询。

似乎

@Formula(value = " SELECT sum(score) ") 
应该是

@Formula(value = " sum(score) ") 
相反。可能我还没有尝试过发送到MySQL的SQL查询是

SELECT SELECT sum(this_.score) as formula0_0_ from Player this_
这显然是无效的


MySQL只显示它遇到错误时的SQL字符串。在您的情况下,这是没有帮助的,因为从这一点开始,您恰好有一个有效的SQL查询。

您确实在hibernate配置中使用了正确的方言作为您正在使用的SQL服务吗?我相信是这样的,请参阅下面的问题:最后一个@Formula值是否应该是sumscore而不是SELECT sumscore?可能发送到数据库的SQL查询是SELECT sum。。。。来自…,MySQL正在抱怨第二个选择。是的,这个改变确实让我走得更远。我会做更多的测试,但是你可以考虑把它作为一个答案,这样我就可以接受K,这就解决了问题。我真的希望mysql在异常中为我提供了整个查询。您确实在hibernate配置中使用了正确的方言作为您正在使用的sql服务吗?我相信是的,请参阅问题,也许:最后一个@Formula值应该是sumscore而不是SELECT sumscore?可能发送到数据库的SQL查询是SELECT sum。。。。来自…,MySQL正在抱怨第二个选择。是的,这个改变确实让我走得更远。我会做更多的测试,但是你可以考虑把它作为一个答案,这样我就可以接受K,这就解决了问题。我真希望mysql在异常中给了我完整的查询。虽然这个答案正确地回答了我为什么会出现语法错误的问题,但它显然不是我想要的解决方案。为了正确计算所有玩家的分数,我需要将整个查询放在公式@Formulavalue=SELECT sump.score FROM player pal的括号中。虽然这个答案正确地回答了我的问题,为什么我会遇到语法错误,但显然这不是我要找的解决方案。为了正确计算所有玩家的分数总和,我需要在公式@Formulavalue=中用括号括起整个查询,然后从玩家p中选择shall.score