首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有必要调用persist()吗?

有必要调用persist()吗?
EN

Stack Overflow用户
提问于 2012-12-27 23:21:47
回答 2查看 153关注 0票数 1

removeGroupCoordinator()有两个参数:用户名和组名。该方法从输入组中删除输入用户。

有一个重载的removeGroupCoordinator(coordinators: Set<Long>, coordinatorIdToRemove: Long, groupId: Long),它通过最终调用coordinators.remove(coordinatorIdToRemove)从组中删除协调器。

在调用flush之前是否需要调用persist()?我相信这不是因为flush()会将数据库同步到缓存,我刚刚用我的coordinators.removeCoordinator(...).修改了缓存

代码语言:javascript
复制
public void removeGroupCoordinator(final long followerId, final long followingId)
{
    DomainGroup groupEntity = getDomainGroup();

    Set<Person> groupCoordinators = groupEntity.getCoordinators();

    removeGroupCoordinator(groupCoordinators, followerId, followingId);

    groupEntity.setCoordinators(groupCoordinators);

    // getEntityManager().persist(groupEntity); needed? 

    getEntityManager().flush();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-28 03:14:58

这取决于传入persist()groupEntity实例的状态。根据JPA specificationpersist(X)的语义是:

  • 如果X是一个新实体,它将成为托管实体。实体X将在事务提交时或之前或作为刷新操作的结果输入到数据库中。
  • 如果X是预先存在的托管实体,则持久化操作将忽略它。但是,如果从X到这些其他实体的关系是用cascade=PERSIST或cascade=ALL注释元素值批注的,或者是用等效的XML描述符元素指定的,则持久化操作将级联到X引用的实体。
  • 如果X是已移除的实体,则它将变为托管的。
  • 如果X是分离的对象,则可以在调用持久化操作时引发EntityExistsException,或者可以在刷新或提交时引发EntityExistsException或另一个PersistenceException。对于从X的关系引用的所有实体Y,如果与Y的关系已经用级联元素值cascade=PERSIST或cascade=ALL进行了批注,则为
  • 。持久化操作应用于Y.

因此,我想说,只有在以下情况下,您的代码中才需要persist()

  1. groupEntity是刚刚由new()

实例化的新实例

  • groupEntity具有一些“持久化”级联关系,这些关系引用了一些刚刚由new()实例化的实例
票数 2
EN

Stack Overflow用户

发布于 2012-12-27 23:53:29

调用persist()并不是强制性的。如果该对象已经与Hibernate会话相关联,则将保存对该对象所做的所有修改。来自手册Modifying persistent objects

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14056974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档