2013-01-20 20 views
1

我在一个项目中首次使用Cayenne。直到现在,我使用SelectQuery并且非常喜欢它。我现在需要更新一个对象,例如我的User对象包含一个emailId属性。当用户需要更新他/她的电子邮件时,我采用现有的User对象并使用用户提供的新值更新emailId属性。使用Apache Cayenne将对象更新到数据库

现在的问题开始了,我不明白如何将更新持久化到数据库。我的选项似乎限于SQLTemplate或使用EJB QL。我对吗?是否有更好的方法将更新的对象提供给DataContext并将更新持久保存到数据库?

我在网络应用程序中使用Cayenne,并通过WebApplicationContextFilter获取上下文。

回答

1

是的,当然有更优雅的方式。你让一个或多个改变你的对象,那么你通过ObjectContext的提交他们用来获得第一名的对象:

ObjectContext context = ... 
List<MyEntity> objects = context.performQuery(...); 
MyEntity o = objects.get(0); 
o.setXyz("new value"); // I assume you got to this point 
... 
context.commitChanges(); 

最后一行将所有更改到数据库。

+0

谢谢安德鲁斯。我非常喜欢Cayenne,但我希望文档更加彻底,尤其是在Web应用程序中使用它时。一旦我意识到上下文与会话绑定,我就意识到了答案。不过非常感谢您的回复。有没有一个很好的例子,说明Context与请求绑定的位置,以及将Context与请求绑定在一起的性能折衷是什么?上下文是否与单个数据库连接绑定?如果是这样,连接池的配置应该是什么? – user1781912

+0

对不起,刚刚在这里注意到你的评论。如果这些问题仍不清楚,请随时打开更多的顶级问题。 –

相关问题