Ok. I narrowed down the problem.
What I want is to maintain unowned relationship.
I have simple class with set of Long (they are supposed to be ids of
other objects):
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Dummy {
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(id);
sb.append(", Keys ");
sb.append(idSet);
return sb.toString();
}
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key id;
@Persistent
Set<Long> idSet = new HashSet<Long>();
public void addId(Long id){
idSet.add(id);
}
public Key getKey(){
return id;
}
}
The problem is- if I create new object of class Dummy and make it
persistent
@Test
public void testIt(){
Dummy p = new Dummy();
PersistenceManager pm = PMF.get().getPersistenceManager();
p.addId((long)1);
pm.makePersistent(p);
p.addId((long)2);
Key id = p.getKey();
pm.close();
pm = PMF.get().getPersistenceManager();
Dummy pp = pm.getObjectById(Dummy.class, id);
System.out.println(pp);
}
it ignores all changes to idSet made after makePersistent() call. So,
for code above I have:
Dummy(1), Keys [1]
Key 2 is lost.
But when I restore by
pm.getObjectById(Dummy.class, id);
everything looks good. I can add and more ids and restore them
successfully:
@Test
public void testIt(){
Dummy p = new Dummy();
PersistenceManager pm = PMF.get().getPersistenceManager();
p.addId((long)1);
pm.makePersistent(p);
p.addId((long)2);
Key id = p.getKey();
pm.close();
pm = PMF.get().getPersistenceManager();
Dummy pp = pm.getObjectById(Dummy.class, id);
System.out.println(pp);
pp.addId((long)3);
pp.addId((long)4);
System.out.println(pp);
pm.close();
pm = PMF.get().getPersistenceManager();
Dummy ppp = pm.getObjectById(Dummy.class, id);
System.out.print(ppp);
}
here I have what I'm supposed to have:
Dummy(1), Keys [1]
Dummy(1), Keys [1, 3, 4]
Dec 26, 2009 1:43:29 PM org.datanucleus.ObjectManagerImpl close
INFO: Outstanding nontx update being committed to datastore
Dummy(1), Keys [1, 3, 4]
So, it looks like it is not possible to maintain unowned relationship.
Did anybody create unowned relationship?
Thank you,
Andrey
On Dec 26, 12:10 am, ailinykh <[email protected]> wrote:
> Hello, everybody!
> I try to achieve simple thing - storing a set of keys.
> I have two classes:
>
> @PersistenceCapable(identityType = IdentityType.APPLICATION)
> public class Account {
>
> @PrimaryKey
> @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
> private Key id;
>
> �...@persistent(mappedBy="account")
> List<Label> labels = new ArrayList<Label>();
>
> @Persistent
> Set<Key> ids = new HashSet<Key>();
>
> }
>
> @PersistenceCapable(identityType = IdentityType.APPLICATION)
> public class Label {
> @PrimaryKey
> @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
> private Key id;
>
> �...@persistent
> private Account account;
>
> }
>
> I created new Account
>
> Account a = new Account();
> then added two Labels to Account, then added Label's keys to ids set.
> As result I have for ids:
> [Account(1)/Label(4), Account(1)/Label(3)]
>
> which looks correct.
>
> Then I called
> pm.makePersistent(a),
> pm.close();
>
> I created new instance of PersistenceManager and restore Account
> object.
> I get back two Labels, but their keys (ids set) is empty.
> What did I do wrong?
>
> Thank you,
> Andrey
--
You received this message because you are subscribed to the Google Groups
"Google App Engine" 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?hl=en.