当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