removeGroupCoordinator()
有两个参数:用户名和&组名。该方法从输入组中删除输入用户。
重载removeGroupCoordinator(coordinators: Set<Long>, coordinatorIdToRemove: Long, groupId: Long)
会通过最终调用coordinators.remove(coordinatorIdToRemove)
从组中删除协调员。
在调用flush之前是否需要调用persist()
?我相信不是因为flush()
会将数据库同步到缓存,我将使用coordinators.removeCoordinator(...).
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();
}
答案 0 :(得分:2)
这取决于传递给groupEntity
的{{1}}个实例的状态。根据{{3}},persist()
的语义是:
如果X是新实体,则会被管理。实体X将在事务提交时或之前输入数据库,或者作为a 刷新操作的结果。
如果X是预先存在的托管实体,则persist操作会忽略它。但是,持久化操作与实体级联 如果从X到这些其他实体的关系,则由X引用 使用cascade = PERSIST或cascade = ALL注释进行注释 元素值或使用等效的XML描述符元素指定。
如果X是已删除的实体,则会被管理。
如果X是一个分离的对象,则在调用持久化操作或EntityExistsException或者EntityExistsException时可能会抛出EntityExistsException。 在刷新或提交时可能会抛出另一个PersistenceException。
对于来自X的关系引用的所有实体Y,如果与Y的关系已使用级联元素值注释 cascade = PERSIST或cascade = ALL,持久化操作应用于Y。
所以,我想在以下情况下只需要代码中persist(X)
:
persist()
是由groupEntity
new()
有一些“持久”级联关系,这些关系引用了一些仅由groupEntity
实例化的实例答案 1 :(得分:1)
调用persist()
并非强制要求。如果该对象已与Hibernate会话关联,则将保存对该对象的每个修改。从手册Modifying persistent objects。