我遇到了一个奇怪的错误,试图在MySQL中使用Hibernate。我有以下命名查询:休眠MySQL查询错误加入的未知列在
SELECT SUM(s.plotline.value), s.character FROM Story as s WHERE s.chapter.chapterID = ?1 GROUP BY s.character ORDER BY SUM(s.plotline.value)
这被转换为下面的SQL语句:
select sum(plotline1_.Value) as col_0_0_, story0_.CharacterID as col_1_0_, character2_.CharacterID as Characte1_5_,
character2_.AuthorID as AuthorID5_, character2_.BookID as BookID5_, character2_.CharacterName as Characte2_5_,
character2_.LastModified as LastModi3_5_
from fantasy.story story0_, fantasy.plotline plotline1_
inner join fantasy.character character2_ on story0_.CharacterID=character2_.CharacterID
where story0_.PlotlineID=plotline1_.PlotlineID and story0_.ChapterID= 4
group by story0_.CharacterID
order by count(plotline1_.Value)
当我执行此我得到:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'story0_.CharacterID' in 'on clause'
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
java.lang.reflect.Constructor.newInstance(Unknown Source)
com.mysql.jdbc.Util.handleNewInstance(Util.java:407)
com.mysql.jdbc.Util.getInstance(Util.java:382)
如果我更改查询到这并直接在SQL中运行它运行正常:
select sum(plotline1_.Value) as col_0_0_, story0.CharacterID as col_1_0_, character2_.CharacterID as Characte1_5_,
character2_.AuthorID as AuthorID5_, character2_.BookID as BookID5_, character2_.CharacterName as Characte2_5_,
character2_.LastModified as LastModi3_5_
from fantasy.story story0, fantasy.plotline plotline1_
inner join fantasy.character character2_ on CharacterID = character2_.CharacterID
where story0.PlotlineID=plotline1_.PlotlineID and story0.ChapterID= 4
group by story0.CharacterID
order by count(plotline1_.Value)
有两个部分对这一问题
- 为什么去掉明确资格中或CharacterId的连接,使这项工作?我的经验主要是使用SQL Server,如果您尝试以这种方式编写查询,它实际上会失败。
- 有没有办法让Hibernate以适当的形式给我提供查询或调整我的MySQL配置,以便它接受Hibernate产生它的方式的查询?
我可能已经找到了第1部分的解释http://krisgale.com/beware-of-table-alias-in-left-join/似乎MySQL决定要求括号多个表,如果他们在选择从版本5开始。这不帮助我修复我的hibernate查询,这里的帮助仍然非常感谢 – 2011-03-02 02:22:52