Actually I had to persist the user :D But I found another problem: The Key for the Thread is a Long... Appengine is generating dupes for that key even though it's the pk. It loooks like it realizes that a Thread is owned by a user and in the DB it ends with a PK <UserID, ThreadID>
The weird part is that the comment does not inherits that and if I open the thread 1 for user A and thread 1 for user B I see the same comments. On Wed, Feb 23, 2011 at 11:42 AM, WillSpecht <willspe...@gmail.com> wrote: > Check out this blog post: > > http://gae-java-persistence.blogspot.com/2009/10/creating-bidrectional-owned-one-to-many.html > > I'm pretty sure you want to be persisting the thread and not the > comment. If you make it un-owned, you want the thread to have a key > and a user, then each comment has a key and a parent key which is the > key of the thread it belongs to. if you do a query where parent key > == thread key you should get all the comments that belong to the > thread. > > On Feb 22, 7:06 pm, "Fernando O." <fot...@gmail.com> wrote: > > tried that and it's telling me > > org.datanucleus.exceptions.NucleusObjectNotFoundException: Could not > > retrieve entity of kind Thread with key Thread(51) > > > > I also tried doing a query with the Thread key and UserKey (wich is the > key > > for a thread) and then I get an exception about modifying 2 entities in 1 > > transaction :S > > > > On Tue, Feb 22, 2011 at 8:56 PM, Fernando O. <fot...@gmail.com> wrote: > > > Thanks! I'll try that. BTW no, addComment does not store the comment. > > > > > On Tue, Feb 22, 2011 at 8:49 PM, WillSpecht <willspe...@gmail.com> > wrote: > > > > >> Don't you need to persist the thread as well as the comment? It's > > >> hard to analyze your code with such a small sample. Does addComment > > >> persist the thread? My > > >> guess is that something is making the transaction fail, probably > > >> cause you are trying to operate on two different entity groups. I > > >> would simply store the comment as it's own entity and when you want > > >> all the comments simply do a query for comments with parentKey == > > >> ThreadKey. > > > > >> On Feb 21, 9:30 pm, "Fernando O." <fot...@gmail.com> wrote: > > >> > Hi all. > > >> > First of all I have to admit: I havent read all the docs. > > > > >> > I had a small app running, it basically has this: > > >> > A User: > > >> > @PersistenceCapable(detachable = "true") > > >> > @FetchGroup(name = "_post", members = { @Persistent(name = "posts") > }) > > >> > public class User implements Serializable{ > > >> > @PrimaryKey > > >> > @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) > > >> > private Key key; > > >> >> @Persistent(mappedBy = "user", defaultFetchGroup = "true") > > >> > @Element(dependent = "true") > > >> > private List<Post> posts; > > >> > ....} > > > > >> > A thread : > > > > >> > @PersistenceCapable(detachable = "true") > > >> > @FetchGroup(name = "_user", members = { @Persistent(name = "user")}) > > >> > public class Thread implements Serializable { > > >> > @PrimaryKey > > >> > @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) > > >> > private Long key; > > > > >> > @Persistent(defaultFetchGroup = "true") > > >> > @Element(dependent = "true") > > >> > private User user; > > >> > ... > > > > >> > } > > > > >> > So now I want to add comments, each comment will have: the user that > > >> made > > >> > the comment, and the thread that it belongs to, and some other > fields: > > >> > @PersistenceCapable(detachable = "true") > > >> > public class ThreadComment implements Serializable{ > > >> > @PrimaryKey > > >> > @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) > > >> > private Key key; > > > > >> > @Persistent(defaultFetchGroup = "true") > > >> > @Element(dependent = "true") > > >> > private User user; > > > > >> > @Persistent(defaultFetchGroup = "true") > > >> > @Element(dependent = "true") > > >> > private Thread thread; > > >> > ... > > > > >> > } > > > > >> > I changed the Thread to include a list of comments: > > >> > @PersistenceCapable(detachable = "true") > > >> > @FetchGroup(name = "_user", members = { @Persistent(name = > > >> > "comments"),@Persistent(name > > >> > = "user")}) > > >> > public class Thread implements Serializable { > > >> > .... > > >> > @Persistent(defaultFetchGroup = "true") > > >> > @Element(dependent = "true") > > >> > private List<ThreadComment> comments; > > > > >> > } > > > > >> > My problem is that meanwhile this works in memory when I try to > persist > > >> the > > >> > ThreadComment > > >> > PersistenceManager pm = getPMF(); > > >> > Transaction tx = pm.currentTransaction(); > > >> > tx.begin(); > > >> > thread.addComment(comment); > > >> > pm.makePersistent(comment); > > >> > tx.commit(); > > >> > pm.close(); > > > > >> > the code gets excecuted but I don't see the comment in the database > (in > > >> fact > > >> > the logs show no db activity either) > > >> > So I don't see an exception, the code gets excecuted but I don't see > the > > >> > comment in the DB. > > > > >> > I already have the db with soem threads without comments, this is a > "new > > >> > feature" > > > > >> > Any idea of what I'm doing wrong? (please don't say everything :D ) > > > > >> > Thanks! > > > > >> > Fernando > > > > >> -- > > >> 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-java@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. > > -- > 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-java@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. > > -- 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-java@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.