2014-04-01 46 views
1

我有嵌套查询创建HQL的更新实体CommitteeMembership或使用加入一个问题,我第一次尝试这样的查询:更新使用连接或nasted子查询的Hibernate(HQL)

update CommitteeMemberShip cms set cms.isDeleted=1 
where cms.committeeCycle.committee.id=:committeeId 

,但生成的SQL是错误如下:

update CommitteeMemberShip cross join set isDeleted=1 where committee_id=? 

没有任何在此之后“交叉联接”使休眠抛出SQLGrammarException

之后,我改变了我的查询使用子查询:

update CommitteeMemberShip cms set cms.isDeleted=1 
where cms.id in (select cmsIn.id from CommitteeMemberShip cmsIn inner join 
cmsIn.committeeCycle cc inner join cc.committee c where c.id=:committeeId) 

现在休眠抛出

java.sql.SQLException: You can't specify target table 'CommitteeMemberShip' for 
update in FROM clause 

任何一个有任何想法如何,我可以写在HQL此更新查询?

回答

0

尝试此

更新CommitteeMemberShip CMS设置cms.isDeleted = 1 其中cms.id =一些(从CommitteeMemberShip cmsIn内选择cmsIn.id加入 cmsIn.committeeCycle CC内加入cc.committee c其中℃。 ID =:committeeId)

+0

我认为这将做到第二次尝试的子查询有问题,它抛出s: java.sql.SQLException:您无法在FROM子句中指定目标表'CommitteeMemberShip'进行更新 –

+0

我不确定,但试试这个 更新CommitteeMemberShip cms加入cms.id = cms2.id设置cms的CommitteeMemberShip cms2。 isDeleted = 1 其中cms2.committeeCycle.committee.id =:committeeId – Fanooos

+0

您不能在实体名称或别名后面写入连接,它会抛出org.hibernate.hql.ast.QuerySyntaxException:期待“设置”,找到“连接” –

0

尝试此 “UPDATE表1 R SET r.column = @value WHERE r.column IN(” 选择rd.Id FROM r.table2 RD WHERE rd.Column =' “+ @值+” 'AND rd.Column ='“+ value +”'“;