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 at http://groups.google.com/group/google-web-toolkit?hl=en.