2010-04-14 3 views
0

J'ai besoin de mettre à jour une sous-classe jointe. Comme Hibernate ne permet pas de mettre à jour les sous-classes jointes dans hql ou named-query, je veux le faire via SQL. Je ne peux pas non plus utiliser une requête nommée sql car les mises à jour via named-query ne sont pas supportées par Hibernate. J'ai donc décidé d'utiliser un SQLQuery.Comment exécuter une mise à jour via SQLQuery dans Hibernate

Mais Hibernate plaintes de ne pas appeler addScalar():

org.hibernate.QueryException: addEntity() ou addScalar() doit être appelée sur une requête SQL avant d'exécuter la requête.

Des mises à jour renvoient-elles le nombre de lignes affectées et comment est appelée cette colonne?

Existe-t-il d'autres manières de mettre à jour une sous-classe jointe dans Hibernate?

Voici un bref exemple de ce que je suis en train de faire:

<hibernate-mapping> 
     <class name="example.NiceClass" table="NICE_CLASS"> 
    <meta attribute="class-code"></meta> 
    <id name="id" type="java.lang.Long"> 
    <column name="NICE_CLASS_ID" precision="8" /> 
    <generator class="sequence"> 
    <param name="sequence">NICE_CLASS_SEQ</param> 
    </generator> 
    </id> 
    </class> 
</hibernate-mapping>  
<hibernate-mapping package="example"> 
    <joined-subclass name="SubJoinedClass" table="SUB_JOINED_CLASS" 
    extends="NiceClass"> 
     <key column="NICE_CLASS_ID" foreign-key="NICE_JOINED_ID_FK"/> 
    <property name="name" type="string" not-null="false"> 
    <column name="NAME" > 
    <comment>name</comment> 
    </column> 
    </property> 
     </joined-subclass> 
</hibernate-mapping> 

Merci à l'avance!

Je veux faire:

update SubJoinedClass set name = 'newName' 
+0

pouvez-vous expliquer quelle requête vous souhaitez effectuer sur la sous-classe jointe? – oedo

Répondre

1

Comment exécuter la requête de mise à jour? Quelle méthode appelez-vous pour l'exécuter? Appelles-tu 'ExecuteUpdate'?

Et pourquoi pensez-vous que vous ne pouvez pas exécuter une requête de mise à jour sur une sous-classe en utilisant HQL? Autant que je sache, c'est possible.

+0

Im en utilisant le code SpringDAOImpl: Recherche namedQuery = session.getNamedQuery Et je reçois org.hibernate.QueryException: déclarations de mise à jour contre jointes ou les sous-classes syndicales non encore pris en charge! Hibernate version 3.0.5 Merci pour votre réponse rapide! – ssedano

+0

Oui, vous avez raison, mais dans les versions publiées plus tard celle que nous utilisons (3.0.5). L'un de vous sait comment faire cela avec 3.0.5? Merci – ssedano

Questions connexes