JPA:用分离的对象替换List中的引用实体

时间:2017-06-01 08:40:07

标签: java hibernate jpa java-ee

我有一个名为FileSet的实体,其中包含一个名为File:

的实体列表
@Entity
@Table(name = "FILESET")
public class FileSet {

    @Id
    @Column(name = "ID", nullable = false)
    private String id;

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinTable(name = "FILESET_MAPPING", //
            joinColumns = @JoinColumn(name = "FILESET_ID"), //
            inverseJoinColumns = @JoinColumn(name = "FILE_ID"))
    private Collection<File> files = Lists.newArrayList();

    ...
}

文件实体本身:

@Entity
@Table(name = "FILE")
public class File {

    @Id
    @Column(name = "FILE_NUMBER", nullable = false)
    private String fileNumber;

    ...
}

现在我要做的是更新文件集中的文件列表。为此,我使用相同的fileNumber创建新的(分离的)File对象,并将其替换为列表:

String fileNumberToReplace = "123";
File newFile = new File(fileNumberToReplace);

fileSet.getFiles().removeIf(file -> Objects.equals(fileNumberToReplace, file.getFileNumber()));
fileSet.getFiles().add(newFile);

entityManager.merge(fileSet);

我原以为自从CascadeType.ALL处于活动状态时,JPA会自动合并列表中的分离元素。但是,我正在成为例外:

Multiple representations of the same entity are being merged

然后我尝试单独合并列表中的元素,然后在此之后设置文件:

fileSet.getFiles().forEach(entityManager::merge);
entityManager.merge(fileSet);

这没有用。我对JPA很新,所以我不确定我做错了什么。有人可能会指出我正确的方向吗?

0 个答案:

没有答案