On 7/11/12 4:57pm, Alexey Katorgin wrote:

You should always create a context and then create objects within that context
using the methods Cayenne
gives you. This is different to the undecorated POJO that Hibernate allows you
to create.

Ari



I develop a web-app and if I will create entities bounded to a dataContext, and
after user has leaved the page (by browser navigation buttons, closing the tab,
etc.) such entities will stay uncommitted and may be in inconsistency state
(user has not filled all required fields). And on the next commit this objects
will be committed and raise validation exception.

It is the reason why I want to use unbounded dataObjects.

So I've decide to use transient objects not bounded to any dataContext. In this
case such object just be removed by garbage collector after user leaved page
unexpectedly. And where user will click OK, such objects will be manually
attached to a dataContext and committed.

It makes my code less clearly if can't set relationships between transient
objects. Because I need to create additional temporary lists to store all
transient entities and iterate its to register to a dataContext before
committing.


What is the best practice for this use case?


Typically you bind a context to the user session so that the user can continue 
to navigate through the site and not lose the work they have done but not yet 
saved. For example, they may assemble a shopping basket, contact details and 
payment information. Then you commit the whole thing atomically at the end.

Don't think of a data context as something you create when you are ready to 
save. Think of it as a big bucket into which you put all the objects you are 
working with. At the end, throw it away and make a new one, or commit it to the 
database. For more complex arrangements read up on how to create parent/child 
contexts, but you don't need to do that here. Start simple.

Make as many contexts as you need to have buckets of different information.


Ari


--
-------------------------->
Aristedes Maniatis
GPG fingerprint CBFB 84B4 738D 4E87 5E5C  5EFA EF6A 7D2E 3E49 102A

Reply via email to