Hi Jason.
Thanks for your help. I can't get your suggestion to work - the data
either doesn't get saved or doesn't get retrieved because when I
retrieve the object it is always an empty map.
I have tried both setting entries into the existing HashMap and
setting the whole HashMap to a different, new HashMap every time I
change a value.
I am setting another string at the same time as setting the Map
values, and it is saved and retrieved fine.
I also tried dropping in another makePersistent call but that didn't
seem to make a difference.
My code is below. Any more suggestions? Is it possible it works on the
AppEngine but not in the SDK?
Thanks for your help,
Graham.
// Copyright (c) 2004 Graham Lea. All rights reserved.
import java.util.Map;
import java.util.HashMap;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PrimaryKey;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.IdGeneratorStrategy;
import com.google.appengine.api.datastore.Key;
/**
* <p></p>
*
* @author Graham Lea
* @version $Revision:$
*/
@PersistenceCapable(identityType = IdentityType.APPLICATION,
detachable = "true")
public class
MyPersistentChildClass
{
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
private String name;
@Persistent
private String label;
@Persistent(serialized = "true", defaultFetchGroup = "true")
private Map<String, Byte> values = new HashMap<String, Byte>();
@Persistent
private String testString;
public
MyPersistentChildClass()
{}
public
MyPersistentChildClass(String name, String label)
{
this.name = name;
this.label = label;
}
public Key
getKey()
{
return key;
}
public String
getName()
{
return name;
}
public void
setName(String name)
{
this.name = name;
}
public String
getLabel()
{
return label;
}
public void
setLabel(String label)
{
this.label = label;
}
public void
setValue(String criterion, byte value)
{
values.put(criterion, value);
}
public void
removeValue(String criterion)
{
values.remove(criterion);
}
public Byte
getValue(String criterion)
{
return values.get(criterion);
}
public Map<String, Byte>
getValues()
{
return values;
}
public void
setValues(Map<String, Byte> values)
{
this.values = values;
}
public String
toString()
{
return "MyPersistentChildClass@" + hashCode() +
"[name=" + name +
", label=" + label +
", values=" + values +
"]";
}
public void setTestString(String testString)
{
this.testString = testString;
}
public String getTestString()
{
return testString;
}
}
On Aug 15, 2:54 am, "Jason (Google)" <[email protected]> wrote:
> First, keep in mind that joins aren't supported by App Engine's datastore --
> you'll have to use owned or unowned relationships
> instead:http://code.google.com/appengine/docs/java/datastore/relationships.html
>
> You should be able to get this to work using the following:
>
> @Persistent(serialized="true")
> private Map<String, Byte> values = new HashMap<String, Byte>();
>
> Let me know if you have any more questions on this.
>
> - Jason
--~--~---------~--~----~------------~-------~--~----~
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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/google-appengine-java?hl=en
-~----------~----~----~----~------~----~------~--~---