创建实体的独立副本

时间:2018-01-16 12:47:59

标签: java spring hibernate spring-mvc spring-boot

我正在创建一个新列表。我从实体列表中将对象写入新列表。然后我将适当地清理实体列表中的项目,这也会导致从这个新列表中删除对象。

final ContributionEntity contributionEntity = this.findContribution(contributionId, DataStatus.WAITING, user, MovieField.PHOTO);

final Set<Long> idsToAddBeforeCleanUp = contributionEntity.getIdsToAdd();

this.cleanUpIdsToAdd(contributionEntity.getIdsToAdd(), contribution.getIdsToAdd(), contributionEntity.getMovie().getPhotos());

private void cleanUpIdsToAdd(final Set<Long> idsToAddFromEntity, final Set<Long> idsToAddFromDto,
                                 final List<? extends MovieInfoEntity> entities) {
        for (final Iterator<Long> it = idsToAddFromEntity.iterator(); it.hasNext(); ) {
            final Long id = it.next();
            if (!idsToAddFromDto.contains(id)) {
                it.remove();
                this.delete(entities, id);
            }
        }
    }

此代码会从主题照片contributionEntity列表中删除实体,但也会从列表idsToAddBeforeCleanUp中删除对象。

如何从实体复制列表并使其独立于此实体?我不想删除列表idsToAddBeforeCleanUp中的项目。

1 个答案:

答案 0 :(得分:0)

final Set<Long> idsToAddBeforeCleanUp = new HashSet<>();   
contributionEntity.getIdsToAdd().foreach(item -> idsToAddBeforeCleanUp.add(item));

你没有真正创建一个新的集合,你只是对该集合做了另一个引用。使用上面的代码,您可以创建一个新列表,它应该有效。

相关问题