JPA EclispeLink Insert / Persist用空列表替换空列表

时间:2015-08-28 08:49:41

标签: java jpa persistence eclipselink

我有两个实体PersonPersonImage

@Entity
public class Person {

....

    @OneToMany(mappedBy = "person", cascade = { CascadeType.PERSIST,
            CascadeType.REMOVE }, orphanRemoval = true, fetch = FetchType.LAZY)
    private List<PersonImage> images;

....
}

@Entity
public class PersonImage {

....

    @Lob
    private byte[] content;

    @ManyToOne
    private Person person;
....

}

问题在于,当我插入Person(没有附加任何图像)时,在插入images列表之前null。但插入后列表是一个空的IndirectList实例。调试时我可以看到它已从null更改为{[]}

为什么会这样?我希望它是null或未初始化IndirectList(在调试时应该看起来像{IndirectList: not instantiated})。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

猜猜你看到org.eclipse.persistence.indirection.IndirectList实例,它在内部用于表示这种1:N关系。 它在内部保存Vector委托实例,并且在调用persist时实例化IndirectList和Vector。它是默认的EclipseLink行为。

1:N关系中的null值和emty列表的语义是相同的:没有与Person关联的PersonImage实例。您是否有一些严肃的理由将空值与空列表区分开来?如果是这样,您必须将其保存在单独的属性中。