Thanks for your informative reply. So basically, the only solution you found was to create a copy of the whole object holding the HashMap, persist the new object and delete the old object? I sincerely hope I have misunderstood you as this is a terrible way to have to go about it.
Is there any other way, you can update a HashMap rather than creating a whole new object to persist? Thanks again for your help with this. On Apr 18, 6:50 am, "sreenidhi b.s" <sreenidh...@gmail.com> wrote: > http://groups.google.com/group/google-appengine-java/browse_thread/th... > > the link above works only for persisting and retrieving hash maps ,but i did > not find any "proper" solution for updating and persisting the updated > hashmaps. > > "You have to provide a new reference to the updated hashmap ,since datastore > cannot identify between updated and stale hashmap." > But it did not work in my case and i urge you to try the same before you try > alternatives. > > The Alternative i found was , > 1) retrieve the persisted hashmap , > 2) create a new hashmap reference to updated hashmap > 3) make the new reference persistent. > 4)delete the previous reference. > > code: /* i have used some custom classes ,but the you should be able to > understand the logic i've employed to get the solution */ > > /*Retrieve the persisted HashMap*/ > PersistenceManager pm0= PMF.get().getPersistenceManager(); > Query query0 = pm0.newQuery(VocabHashMap.class); > List<VocabHashMap> results1 = (List<VocabHashMap>) query0.execute(); > /*if there are no hashmaps, create a new one */ > if (results1.isEmpty()) > { > > HashMap<String, Double> map = new HashMap<String, Double>(); > for (String a : linelist) { > Double freq = map.get(a); > map.put(a, (freq == null) ? 1 : freq + 1); > } > VocabHashMap vhm =new VocabHashMap(map); > pm0.makePersistent(vhm); > pm0.close(); > > } > > else{ > > for (VocabHashMap vhm : results1) { > > /*if you already have a hashmap,then update it */ > > HashMap<String,Double> map1=vhm.getMap(); /* assign a new reference to > retrieved hashmap */ > > for (String a : linelist) { > Double freq = map1.get(a); > map1.put(a, (freq == null) ? 1 : freq + 1); > > } > > VocabHashMap vhm1=new VocabHashMap(map1); /* create a new hashmap*/ > pm0.makePersistent(vhm1); /*save the updated one */ > pm0.deletePersistent(vhm); /*delete the old reference */ > > } > > pm0.close(); > > > > > > } > On Sun, Apr 18, 2010 at 10:41 AM, seleronm <seler...@gmail.com> wrote: > > Hi, > > > I was useful referring to this thread. > > You might be also useful for it. > > >http://groups.google.com/group/google-appengine-java/browse_thread/th... > > > Hope some of this helps. > > > thanks. > > > > I am not able to persist a HashMap field. This is how I define it: > > > > @Persistent(serialized = "true", defaultFetchGroup = "true") > > > private Map<String, Integer> items; > > > > When I create the Object which the Map is a field of, I instantiate > > > the Map as follows: > > > > items = new HashMap<String, Integer>(); > > > > When I update the "items" HashMap I try to persist the object by doing > > > the following: > > > > PersistenceManager pm = PMF.get().getPersistenceManager(); > > > // Query for Object (HashMap is a field of this Object) > > > // Update HashMap > > > pm.makePersistent(objectContainingHashMap); > > > > However, when I attempt to retrieve the object after persisting it and > > > read the HashMap it is always empty, as though I never updated it. > > > > Has anyone experienced this before? > > > > Thanks > > > > -- > > > You received this message because you are subscribed to the Google Groups > > "Google App Engine for Java" group. > > > To post to this group, send email to > > google-appengine-j...@googlegroups.com. > > > To unsubscribe from this group, send email to > > google-appengine-java+unsubscr...@googlegroups.com<google-appengine-java%2B > > unsubscr...@googlegroups.com> > > . > > > For more options, visit this group athttp:// > > groups.google.com/group/google-appengine-java?hl=en. > > > -- > > You received this message because you are subscribed to the Google Groups > > "Google App Engine for Java" group. > > To post to this group, send email to > > google-appengine-j...@googlegroups.com. > > To unsubscribe from this group, send email to > > google-appengine-java+unsubscr...@googlegroups.com<google-appengine-java%2B > > unsubscr...@googlegroups.com> > > . > > For more options, visit this group at > >http://groups.google.com/group/google-appengine-java?hl=en. > > -- > You received this message because you are subscribed to the Google Groups > "Google App Engine for Java" group. > To post to this group, send email to google-appengine-j...@googlegroups.com. > To unsubscribe from this group, send email to > google-appengine-java+unsubscr...@googlegroups.com. > For more options, visit this group > athttp://groups.google.com/group/google-appengine-java?hl=en. -- You received this message because you are subscribed to the Google Groups "Google App Engine for Java" group. To post to this group, send email to google-appengine-j...@googlegroups.com. To unsubscribe from this group, send email to google-appengine-java+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en.