Java HQL不接受带有联接的更新SQL

Java HQL不接受带有联接的更新SQL,java,mysql,sql,hibernate,hql,Java,Mysql,Sql,Hibernate,Hql,我需要在java应用程序中对MySQL数据库运行以下SQL: update group_table join ( select tab1.letter, tab1.id_group_table from ( select letter, id_group_table, count(letter) as occurrences from letter gr

我需要在java应用程序中对MySQL数据库运行以下SQL:

update group_table 
join
  (
        select tab1.letter, tab1.id_group_table from 
        (
          select  letter,
          id_group_table, 
          count(letter) as occurrences
          from letter
          group by id_group_table, letter 
          order by occurrences desc
        ) tab1
        group by tab1.id_group_table having max(tab1.occurrences)    

  ) tab2 on group_table.id_group_table = tab2.id_group_table

set champion = tab2.letter
where group_table.id_whatever in (1,2,3,4);
如果我在数据库中尝试它,它就会工作。下面是我尝试使用hibernate所做的:

String hqlUpdate = "update group_table join (select tab1.letter, tab1.id_group_table from (select  letter,id_group_table, count(letter) as occurrences from letter group by id_group_table, letter order by occurrences desc) tab1 group by tab1.id_group_table having max(tab1.occurrences)) tab2 on group_table.id_group_table = tab2.id_group_table set champion = tab2.letter where group_table.id_whatever in (1,2,3,4);";
getSession().createQuery( hqlUpdate ).executeUpdate();
下面是我得到的错误:

Ago 04, 2014 12:16:18 AM org.hibernate.hql.internal.ast.ErrorCounter reportError
ERROR: line 1:38: expecting "set", found 'JOIN'
line 1:38: expecting "set", found 'JOIN'
    at antlr.Parser.match(Parser.java:211)
    at org.hibernate.hql.internal.antlr.HqlBaseParser.setClause(HqlBaseParser.java:414)
我需要运行这个精确的查询。。。 如何使用hibernate实现这一点


谢谢

如果需要精确查询,请不要使用HQL,而是使用。

尝试以下代码

String hqlUpdate = "update group_table join (select tab1.letter, tab1.id_group_table from (select  letter,id_group_table, count(letter) as occurrences from letter group by id_group_table, letter order by occurrences desc) tab1 group by tab1.id_group_table having max(tab1.occurrences)) tab2 on group_table.id_group_table = tab2.id_group_table set champion = tab2.letter where group_table.id_whatever in (1,2,3,4);";     
getSession().createSQLQuery( hqlUpdate ).executeUpdate();

在Session.createSQLQuery()中使用本机SQLQuery,而不是HQL