奇怪的 JPA 行为,初始化字段为空
我正在观察一个非常奇怪的实体类行为,并在JPA(休眠实体管理器 3.3.1.ga)加载该类的对象。类具有一个(嵌入式)字段,该字段在声明中初始化。字段的 setter 实现 null 检查(即,在设置 null 值时会引发异常)。
...
@Entity
public class Participant extends BaseEntity implements Comparable<Participant> {
...
@Embedded
private AmsData amsData = new AmsData();
public void setAmsData(AmsData amsData) {
Checks.verifyArgNotNull(amsData, "amsdata");
this.amsData = amsData;
}
...
}
当我使用 JPA 获取此对象时,如果 db 中没有嵌入对象中指定的字段的数据,则该字段为 null。
...
public class ParticipantJpaDao implements ParticipantDao {
@PersistenceContext
private EntityManager em;
@Override
public Participant getParticipant(Long id) {
return em.find(Participant.class, id);
}
...
}
我在字段上使用观察点调试了该过程(当访问或修改字段时应停止),并且在初始化字段时看到一个修改,但是当我从 find 调用获得结果时,该字段为 null。
谁能解释一下,为什么会这样?我如何确保该字段不为空,当数据库中没有嵌入对象的字段的数据时也是如此(除了在查找调用后手动设置它)。