Java 使用Apache Cayenne将对象更新到数据库

Java 使用Apache Cayenne将对象更新到数据库,java,apache-cayenne,Java,Apache Cayenne,我第一次在项目中使用Cayenne。到目前为止,我一直在使用SelectQuery,并且非常喜欢它。我现在需要更新一个对象,例如我的User对象包含emailId属性。当用户需要更新他/她的电子邮件时,我使用现有的user对象,并使用用户提供的新值更新emailId属性 问题从现在开始,我不知道如何将更新持久化到数据库。我的选项似乎仅限于SQLTemplate或使用ejbql。我说得对吗?是否有更优雅的方式将更新后的对象提供给DataContext,并将更新持久化到数据库 我在web应用程序中使

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

问题从现在开始,我不知道如何将更新持久化到数据库。我的选项似乎仅限于
SQLTemplate
或使用
ejbql
。我说得对吗?是否有更优雅的方式将更新后的对象提供给
DataContext
,并将更新持久化到数据库


我在web应用程序中使用Cayenne,并通过
WebApplicationContextFilter

获取上下文是的,当然还有一种更优雅的方式。对对象进行一个或多个更改,然后通过首先用于获取对象的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();
ObjectContext=。。。
List objects=context.performQuery(…);
MyEntity o=objects.get(0);
o、 setXyz(“新值”);//我想你已经说到这一点了
...
context.commitChanges();

最后一行将您的所有更改发送到数据库。

是的,当然还有一种更优雅的方式。对对象进行一个或多个更改,然后通过首先用于获取对象的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();
ObjectContext=。。。
List objects=context.performQuery(…);
MyEntity o=objects.get(0);
o、 setXyz(“新值”);//我想你已经说到这一点了
...
context.commitChanges();

最后一行将您的所有更改发送到数据库。

谢谢Andrus。我非常喜欢Cayenne,但我希望文档更全面,尤其是在web应用程序中使用它时。当我意识到上下文与会话有关时,我就意识到了答案。不过,非常感谢您的回复。是否有一个很好的例子说明上下文绑定到请求的位置,以及将上下文绑定到请求而不是会话的性能权衡是什么?上下文是否绑定到单个数据库连接?如果是这样,连接池的良好配置应该是什么?抱歉,刚才注意到您的评论。如果这些问题仍然不清楚,请随时提出更多的顶级问题。谢谢安德鲁斯。我非常喜欢Cayenne,但我希望文档更全面,尤其是在web应用程序中使用它时。当我意识到上下文与会话有关时,我就意识到了答案。不过,非常感谢您的回复。是否有一个很好的例子说明上下文绑定到请求的位置,以及将上下文绑定到请求而不是会话的性能权衡是什么?上下文是否绑定到单个数据库连接?如果是这样,连接池的良好配置应该是什么?抱歉,刚才注意到您的评论。如果这些问题仍然不清楚,请随时提出更多的顶级问题。