[英]Hibernate MySQL Query Error Unknown Column in Join On
嘗試在MySQL中使用Hibernate時遇到一個奇怪的錯誤。 我有以下命名查詢:
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)
這個問題有兩個部分
您的第一個請求不起作用,因為“ on子句”中的“ story0_”未知
from fantasy.story story0_, fantasy.plotline plotline1_ inner join fantasy.character character2_ on story0_.CharacterID=character2_.CharacterID
當您編寫“從A,B內部聯接C”時,SQL(5.0及更高版本)僅考慮B和C之間的內部聯接,然后僅在這兩個表之間允許“ on子句”。
2解決方案應該起作用:
from ( fantasy.story story0_, fantasy.plotline plotline1_ ) inner join fantasy.character character2_ on story0_.CharacterID=character2_.CharacterID
from fantasy.plotline plotline1_, fantasy.story story0_ inner join fantasy.character character2_ on story0_.CharacterID=character2_.CharacterID
有關更多詳細信息,請訪問: https : //bugs.mysql.com/bug.php?id=13551
我想您找到的解決方案是有效的,因為CharacterID也是plotline1_中的一個字段
我目前在使用Hibernate時遇到此問題,即使我發現了為什么SQL語句引發異常(以及如何更正它),我也不知道如何配置Hibernate來強制它生成這2種解決方案之一。
如果有人知道如何使用Hibernate進行操作,謝謝您的幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.