2010-10-06 4 views
2

Je objet dans la base de données avec des valeurs comme suit:avec la mise à jour record dans la base de données à l'aide JPA

  • id = 1
  • name = "john"
  • chargeid = 6

J'utilise l'instruction de fusion pour mettre à jour le code em.merge(obj)

Quand je vois la requête générée par JPA j'ai trouvé que dans la requête de mise à jour seulement les champs qui ont de nouvelles valeurs ou non sont mis à jour.

J'ai vérifié le haricot qui est associé à cet objet et constaté qu'il n'y a pas d'annotations associées à chargid

Maintenant, lorsque je tente de mettre à jour cette Assemblée parlementaire paritaire, il se correctement mis à jour si je ne mets pas à anyvalue nul. Maintenant, si je mets chargeid = null et que j'essaie de le maintenir dans db, doeskin est changé en null dans db mais il retourne la valeur précédente.

Voici les détails 1 ont enregistrement dans la base de données comme suit

ID  Name chargeID 
1  john  5 

Maintenant, si je définir les valeurs des objets comme

obj.setID(1), 
obj.setName("johnNew") 
obj.setchargID(6) 
entinymanager.merge(obj) 

puis enregistrement est mis à jour comme suit, ce qui est bien

Maintenant, si je veux mettre en charge le zéro, j'utilise le code 0123.
obj.setId(1) 
obj.setName('XYZ') 
obj.setChargeId(null); // i want to update it as null. 

Maintenant, le dossier sera mis à jour comme suit

id name chargeid 
1 XYZ 6  //name is updated to XYZ,but chargeid is not updated to null, how come? 


i want to set chargeid to null. 
+1

@akp post comment vous effectuez ce scénario (code simple), s'il vous plaît –

+0

@arthur: merci pour la déclaration replying.I utilisation de fusion pour mettre à jour l'enregistrement – akp

+0

Afficher certains (pseudo) pour expliquer, je ne comprends pas la description du problème. –

Répondre

0

Peut-être vous avez un « non nulle » définie pour la colonne chargeid? (Dans votre base de données)

+0

Cela devrait déclencher une erreur, ne pas entraîner une mise à jour partielle. –

+0

j'ai vérifié le bean, il doesnnotot pas défini null.Et suis notgeting tout field.idly chargeId n'est pas mis à jour à null, il conserve la valeur précédente – akp

1

J'ai eu le même problème, parce que je créé un nouvel objet:

DatabaseObject obj = new DatabaseObject(); 
obj.setSomeValue(null); 
obj.setRowId(1); 
entityManager.merge(obj); 

Je pensais que si je définir explicitement le numéro d'identification qu'il ne serait pas grave si l'objet JPA est nouveau ou l'existant avec l'identifiant désiré. Peut-être avez-vous fait la même chose?

Le code est correct:

DatabaseObject obj = entityManager.find(DatabaseObject.class, (long) 1); 
obj.setSomeValue(null); 
obj.setRowId(1); 
entityManager.merge(obj); 

J'espère que cela aide.

+2

Si vous faites un '.find' d'abord, puis les modifications que vous faites à ce objet sont mis à jour lorsque vous '.merge'. Si vous créez un nouvel objet et tentez de le fusionner, alors le entityManager présume que vous avez juste oublié de remplir le champ et ne fusionne pas les valeurs nulles – Thraydor

0

Une autre option pour le faire est défini l'objet comme NULL après l'exécution de la méthode de fusion comme ci-dessous:

obj.setchargID(6) 
obj = entinymanager.merge(obj) 
obj.setchargID(null) 
0

S'il vous plaît suivez les étapes ci-dessous. Les valeurs qui ne sont pas définies explicitement seront automatiquement définies sur null.

obj.setId(1); 
obj.setName('XYZ'); 
entinymanager.merge(obj); 

il fonctionnera ..

Questions connexes