Thanks again - I will give that a try.... RB On Nov 23, 2:44 pm, David Chandler <drfibona...@google.com> wrote: > You're welcome, Richard, glad to help. > > My understanding is that Objectify always uses Keys to express > relationships. If you want to retrieve the entity directly, you can > add a getter/setter that calls Objectify to get / put an entity by its > Key. These helper methods are likely what you would expose in the > EntityProxy so client-side code won't have any references to Key. This > works today. > > /dmc > > On Tue, Nov 23, 2010 at 5:23 PM, Richard Berger <richardlan...@gmail.com> > wrote: > > Thank you for the quick and clear reply which completely fixed my > > problem. On a higher level, when support for Keys is added, should I > > use the Key or the Entity? I can see that there may be some value in > > just having the Key and getting the Entity when I need it - although > > it seems like I will nearly always be needing the Entity. But perhaps > > I am missing some key distinction. > > > Thanks so much for taking the time to share your advice! > > RB > > > On Nov 23, 12:26 pm, David Chandler <drfibona...@google.com> wrote: > >> Hi Richard, > > >> RequestFactory doesn't yet support arrays. Use List<T> instead. Also > >> ensure that your Proxy doesn't expose the Objectify Key type, as only > >> entity types and a few value types are supported until 2.1.1. > > >> /dmc > > >> On Tue, Nov 23, 2010 at 2:23 PM, Richard Berger <richardlan...@gmail.com> > >> wrote: > >> > Goal: Save an object an associated collection > >> > How to do this with Request Factory and Objectify? > > >> > I have an object that looks like: > >> > Commitment.java (in com.br.commit2.server.domain) > >> > public class Commitment { > >> > �...@id private Long id; > >> > private String title; > >> > // other simple fields > >> > private Integer version; > > >> > // Methods exposed through Request factory > > >> > // Getters, setters > >> > } > > >> > Since I am trying to use RequestFactory, I also have: > >> > CommitmentProxy.java (in com.rb.commit2.shared) > >> > @ProxyFor (Commitment.class) > >> > public interface CommitmentProxy extends EntityProxy { > >> > public String getTitle(); > >> > public void setTitle(String title); > >> > // rest of interface > >> > } > > >> > Also have > >> > public interface CommitmentSystemRequestFactory extends RequestFactory > >> > { > >> > CommitmentRequest commitmentRequest(); > >> > ... > >> > } > > >> > And... > >> > @Service (Commitment.class) > >> > public interface CommitmentRequest extends RequestContext { > >> > Request<Long> countCommitments(); > >> > // Other methods, implemented in Commitment.java above) > >> > } > > >> > Finally, in my Commit2Binder.java, I have code that works to create a > >> > commitment when a button is clicked (this is just a test app) > >> > CommitmentRequest request = requestFactory.commitmentRequest(); > >> > CommitmentProxy newCommitment = > >> > request.create(CommitmentProxy.class); > >> > newCommitment.setTitle("Test Objectify title"); > >> > newCommitment.setDescription("Test Objectify Description"); > >> > Request<Void> createReq = > >> > request.persistCommitment().using(newCommitment); > > >> > createReq.fire(new Receiver<Void>() { > >> > �...@override > >> > public void onSuccess(Void response) { > >> > Window.alert("Created Commitment!"); > > >> > } > >> > }); > > >> > Surprisingly enough it all works fine. Now, I want to model a new > >> > object, a user with two collections of the Commitment object above. > >> > These are unowned collections. Following the objectify-appengine/ > >> > wiki//IntroductionToObjectify#Relationships, I create CommitUser > > >> > public class CommitUser implements Serializable { > >> > private static final long serialVersionUID = 1L; > >> > �...@id private Long id; > >> > private String googleEmail; > >> > ... > >> > private Key<Commitment>[] dueByMeCommitments; > >> > private Key<Commitment>[] dueToMeCommitments; > >> > } > > >> > And the related CommitUserProxy > >> > @ProxyFor (CommitUser.class) > >> > public interface CommitUserProxy extends EntityProxy { > >> > public int getUserLevel(); > >> > .... > >> > } > > >> > And a new Request Interface > >> > @Service (CommitUser.class) > >> > public interface CommitUserRequest extends RequestContext { > >> > InstanceRequest<CommitUserProxy, Void> persistCommitUser(); > >> > } > > >> > And add a line to my CommitmentSystemRequestFactory.java for > >> > CommitUserRequest. > > >> > Now, in my Commit2Binder, I want to create a new CommitUser - empty > >> > collections are fine to start with. But the code I have, essentially > >> > the code that works for creating a Commitment, fails. The code is: > >> > CommitUserRequest request = requestFactory.commitUserRequest(); > >> > CommitUserProxy newCommitUser = > >> > request.create(CommitUserProxy.class); > >> > newCommitUser.setGoogleNickname("Richard"); > >> > newCommitUser.setGoogleEmail("richardlan...@gmail.com"); > >> > newCommitUser.setUserLevel(1); > >> > newCommitUser.setDueByMeCommitments(null); > >> > newCommitUser.setDueToMeCommitments(null); > >> > Request<Void> createReq = > >> > request.persistCommitUser().using(newCommitUser); > > >> > createReq.fire(new Receiver<Void>() { > >> > �...@override > >> > public void onSuccess(Void response) { > >> > Window.alert("Created User!"); > > >> > } > >> > �...@override > >> > public void onFailure(ServerFailure error) { > >> > Window.alert(error.getMessage()); > >> > } > >> > }); > >> > ; > > >> > The failure occurs when the rquest is fired and the error is: > >> > Caused by: java.lang.ClassCastException: > >> > sun.reflect.generics.reflectiveObjects.GenericArrayTypeImpl cannot be > >> > cast to java.lang.Class > >> > If I remove the calls to setDueByMeCommitments, setDueToMeCommitments > >> > I get the same error. > > >> > I start to look at other ideas, but it starts to seem that I am going > >> > down the wrong path, since this should be something relative. Any > >> > pointers and thoughts would be greatly appreciated. > > >> > Thanks! > >> > RB > > >> > -- > >> > You received this message because you are subscribed to the Google > >> > Groups "Google Web Toolkit" group. > >> > To post to this group, send email to google-web-tool...@googlegroups.com. > >> > To unsubscribe from this group, send email to > >> > google-web-toolkit+unsubscr...@googlegroups.com. > >> > For more options, visit this group > >> > athttp://groups.google.com/group/google-web-toolkit?hl=en. > > >> -- > >> David Chandler > >> Developer Programs Engineer, Google Web > >> Toolkithttp://googlewebtoolkit.blogspot.com/ > > > -- > > You received this message because you are subscribed to the Google Groups > > "Google Web Toolkit" group. > > To post to this group, send email to google-web-tool...@googlegroups.com. > > To unsubscribe from this group, send email to > > google-web-toolkit+unsubscr...@googlegroups.com. > > For more options, visit this group > > athttp://groups.google.com/group/google-web-toolkit?hl=en. > > -- > David Chandler > Developer Programs Engineer, Google Web > Toolkithttp://googlewebtoolkit.blogspot.com/
-- You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to google-web-tool...@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.