2011-06-22 7 views
2

J'ai un objet qui me rend fou. J'essaie de le mettre à jour et chaque fois que je fais tout semble OK jusqu'à ce que je vérifie la base de données et il n'est pas mis à jour. Je suis en train d'allumer tous les journaux mais je ne vois rien d'extraordinaire.Hibernate ne mettant pas à jour l'objet (fusion)

Même après avoir créé un nouvel objet et essayé de le mettre à jour (ou de le fusionner) juste après, il ne s'affichera pas dans la base de données. Il va créer le nouvel objet mais il ne le mettra pas à jour.

Quelqu'un at-il eu un problème similaire et comment l'avez-vous résolu?

<hibernate-mapping package="com.package"> 

<class name="com.package.Tag" table="tags" lazy="false" mutable="false" > 
    <meta attribute="generated-class">com.package.generated.AbstractTag</meta> 
    <meta attribute="scope-class">public abstract</meta> 
    <cache usage="read-write"/> 

    <id name="id" type="long" column="tag_id"> 
     <generator class="native"/> 
    </id> 


    <property name="name" type="string" column="name" unique="true"/> 

    <property name="itemCount" type="integer" column="itemCount"/> 

</class> 

</hibernate-mapping> 
+0

Il serait utile si vous postez du code comme les fichiers hbm (le cas échéant) et le code Java pertinent. –

Répondre

1

Méfiez-vous mutable="false" il fait l'imutable objet par l'application:

Comme indiqué ici: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html

mutable (optionnel - par défaut à true): spécifie que les instances de la classe sont (ou non) mutable. Les classes immuables, mutable = "false", ne peuvent pas être mises à jour ou supprimées par l'application. Cela permet à Hibernate d'effectuer des optimisations de performances mineures.

La suppression de mutable="false" du fichier hbm a permis de résoudre le problème.

+1

J'étais prêt à m'arracher les cheveux exactement dessus. J'ai essayé de comprendre pourquoi les changements de mon objet n'étaient pas mis à jour depuis plus d'une journée maintenant. J'ai activé la validation automatique, ajouté la vidage à ma méthode saveOrUpdate, etc., etc. Rien n'a aidé. Merci beaucoup d'avoir posté cela. – barclay

0

Avez-vous essayé de définir (et d'enregistrer) l'étiquette sur l'article, au lieu d'ajouter des éléments à la classe d'étiquette? Donc, fondamentalement, faire ce qui est requis par la base de données, en créant d'abord une balise (sans aucune référence aux éléments), puis en créant des éléments (enregistrements) avec des références au balise.

Questions connexes