當Hibernate解析出這個的HQL:Hibernate的大小函數生成的SQL在Oracle 11g中失敗
UPDATE VERSIONED Person SET groupsCount = followingGroup.size WHERE id = :id
它生成此SQL:
UPDATE Person
SET version =version+1,
groupsCount=
(SELECT COUNT(followingg1_.followerId)
FROM GroupFollower followingg1_
WHERE Person.id=followingg1_.followerId
)-1
WHERE id IN
(SELECT groupfollo2_.followerId
FROM GroupFollower groupfollo2_
WHERE groupfollo2_.followingId=?
)
該查詢失敗在 「-1」 之後子查詢的次數。如果我取出「-1」它運行得很好,或者如果我將「-1」移動到「SELECT COUNT(followingg1_.followerId) - 1」,它也可以。
我不明白如何解決這個問題,使用db特定的sql的缺點,這是一個11g的錯誤?
哇,我不明白如何將這個hql傳遞給這個sql。我錯過了什麼。 -1從哪裏來。 – 2011-03-14 20:23:50
是啊,它看起來像「followingGroup.size」獲取fkeyed groupfollower表中的匹配記錄,其中有一個followingGroup列。從那裏,我假設也許這會返回什麼hibernate認爲它應該(1對0)錯誤的開始索引,然後減去1以獲得正確的「大小」。 我真的不明白,就是爲什麼查詢失敗,我知道的Oracle SQL非常好,我不明白爲什麼它不能運行 – chrismarx 2011-03-14 21:07:55