我有两个实体Person
和PersonImage
:
@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}
)。我怎样才能做到这一点?
答案 0 :(得分:0)
猜猜你看到org.eclipse.persistence.indirection.IndirectList实例,它在内部用于表示这种1:N关系。 它在内部保存Vector委托实例,并且在调用persist时实例化IndirectList和Vector。它是默认的EclipseLink行为。
1:N关系中的null值和emty列表的语义是相同的:没有与Person关联的PersonImage实例。您是否有一些严肃的理由将空值与空列表区分开来?如果是这样,您必须将其保存在单独的属性中。