2011-08-31 3 views
0

J'ai un objet avec des chaînes et des entiers sous forme de champs, que je peux mettre à jour sans problème. Je trouve juste le bon champ avec l'identifiant unique et l'appel setPersonalName ("Mike"); et faites cet objet avec pm.makePersistent (Personal); Et c'est fait!L'objet ne se mettra pas à jour

Le problème est avec les champs de tableau. Disons un personnel a des missions et je stocker dans

@Persistent 
private String[] Assignments;  

Disons que je veux mettre à jour la 3ème mission donc j'appelle Personal.setAssignment (3, « Donnez le rapport »);

et pm.makePersistent (Personnel); Cela ne sera pas rendu persistant d'une façon ou d'une autre et dans les journaux il n'y a pas d'erreurs (seulement ceci: org.datanucleus.ObjectManagerImpl close: La mise à jour nontx exceptionnelle est validée dans le datastore)! J'ai vérifié si la valeur est dans l'objet, c'est. La valeur est déjà dans l'objet Personnel. Il n'y a aucun problème avec les champs, qui ne sont pas un tableau. (En passant, je peux ajouter un objet comme celui-ci à partir de rien, seule la mise à jour ne fonctionnera pas).

Merci pour toute idée, je recherchais toute la journée, mais n'a pas pu trouver quoi que ce soit ...

est la méthode setAssignment ici:

public void setAssignment(int AssignmentNo, String Assignment) { 
    this.Assignments[AssignmentNo-1] = Assignment; 
    System.out.println(this.Assignments[AssignmentNo-1] + "  " + AssignmentNo + "  " + this.id); 
} 
+0

'Disons que je veux mettre à jour la 3ème assignation de sorte que j'appelle Personal.setAssignment (3," Give the report "); '- Puisque les tableaux sont basés sur 0, cela ne devrait-il pas être' Personal.setAssignment (2, "Donner le rapport"); '? – Thomas

+0

oui Je gère cela dans la fonction setAssignment(). Il soustrait 1 et utilise comme index pour le tableau. – Genom

Répondre

0

Ok, j'ai trouvé la solution. Il s'agit maintenant du tableau. D'une manière ou d'une autre, chaque opération de mise à jour doit se faire via un simple setAssignments (String [] Assignments), où vous mettez à jour un tableau entier au lieu d'un élément. Quelque part, j'ai trouvé que jdo utilise d'une manière ou d'une autre ces méthodes pour changer le champ dans la banque de données. Si vous voulez changer un élément dans un tableau, vous devez changer le tableau "entier" comme this.Assignments = newAssignments; au lieu de this.Assignments[i] = newAssignment;

Questions connexes