I would recommend setting javax.jdo.option.RetainValues=true if you're only going to read the values (for example, during rendering in the view after the controller has committed (or caused to be committed) the transaction.
Using any of the detachCopy*(..) methods will be a performance hit, because copies of objects are made. Using DetachAllOnCommit might be better, as the objects are supposed to transition to detached in place with no copying. Using any of the makeTransient*(..) methods would work, too, but they might lose their identity values, which are often important to keep around. Setting javax.jdo.option.NontransactionalRead=true could have performance and correctness implications. Most operations will require their own connection, and once an object is in the PersistenceManager's cache, it won't necessarily be transactionally consistent. HTH, Matthew On Nov 28, 5:25 pm, tamsler <tams...@gmail.com> wrote: > I am trying to get a collection of objects that are stored in the > database using JDO. Once the objects have been retrieved, they are > marshaled into JSON and sent to the client. > > I need some help in deciding which of the following two approaches is > the better one: > > Approach 1: > // Using detachCopy(...) > public List<Employee> getEmployee(User user) { > > PersistenceManager pm = PMF.get().getPersistenceManager(); > List<Employee> employees, detached = null; > Query query = pm.newQuery(Employee.class); > > try { > employees = (List<Employee>)query.execute(); > detached = pm.detachCopyAll(employees); > > } finally { > pm.close(); > } > return detached; > } > > Approach 2: > > // Using Transaction with setDetachAllOnCommit(true) > > public List<Employee> getEmployee(User user) { > > PersistenceManager pm = PMF.get().getPersistenceManager(); > pm.setDetachAllOnCommit(true); > Transaction tx = persistenceManager.currentTransaction(); p.p1 {margin: > 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco} > Query query = pm.newQuery(Employee.class); > > List<Employee> employees = null; > > try { > tx.begin(); > > employees = (List<Employee>)query.execute(); tx.commit); > > } finally { > pm.close(); > } > return employees; > } > > Any help/advise is greatly appreciated. > > -- Thomas -- 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-j...@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.