2009-04-15 8 views
1

J'essaie de répliquer cette requête de MySQL à HQL: UPDATE utilisateurs u, mines m SET u.mana = u.mana + COALESCE ((SÉLECTIONNER (m.mana_rate) des mines m où m.user_id = u.id), 0)Hibernate: mise à jour à la somme de l'autre table

Il suffit de faire ceci en HQL: mise à jour utilisateur u définir u.mana = u.mana + (sélectionner coalesce (somme (m.manaRate), 0) à partir de la mine où m = m.userId u.id)

Donne l'erreur suivante: Exception in thread "main" org.hibernate.hql.ast. QuerySyntaxException: noeud AST inattendu: requête [mise à jour mm.user.User vous définissez u.mana = u.mana + (sélectionnez coalesce (sum (m.manaRate), 0) à partir de mm.map.buildings.mines.Mine m où m .userId = u.id)]

Je suis nouveau sur Hibernate, donc je ne sais pas par où commencer et ce que signifie l'erreur. Si ce n'est pas possible, puis-je écrire une requête MySQL native dans Hibernate?

EDIT: Le problème semble être dans « u.mana = u.mana + », parce que quand je fais juste u.mana = (sélectionner ... la requête fonctionne très bien

+0

J'ai également expérimenté un comportement étrange en exécutant des suppressions en bloc impliquant des sous-requêtes, et à la fin utilisé SQL natif à la place.Il semble être un problème de la HQL parser –

Répondre

1

vous pouvez écrire native questions à hibernate, plus à ce sujet here

+0

Merci, c'était assez simple, en utilisant createSQLQuery() :) – finpingvin

Questions connexes