簡體   English   中英

Join On中的Hibernate MySQL查詢錯誤未知列

[英]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)

這個問題有兩個部分

  1. 為什么要刪除聯接中對CharacterID的顯式限定才能使此項工作? 我的經驗主要是使用SQL Server,如果嘗試以這種方式編寫查詢,它實際上會失敗。
  2. 有沒有辦法讓Hibernate以適當的形式給我查詢或調整我的MySQL配置,以便它接受Hibernate生成查詢的方式?

您的第一個請求不起作用,因為“ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM