我正在觀察一個非常奇怪的行爲與一個實體類,並加載該類與JPA(hibernate entitymanager 3.3.1.ga)的對象。該類有一個(嵌入)字段,該字段在聲明中初始化。該領域的設置者實現一個空檢查(即當設置一個空值時會引發一個異常)。奇怪的JPA行爲,初始化字段爲空
...
@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這個目的,本字段爲空,如果在數據庫中嵌入對象指定的字段沒有數據。
...
public class ParticipantJpaDao implements ParticipantDao {
@PersistenceContext
private EntityManager em;
@Override
public Participant getParticipant(Long id) {
return em.find(Participant.class, id);
}
...
}
我調試的進程與該領域的觀察點(應該停止時域被訪問或修改),和我看的時候字段被初始化一個修改,但是當我從查找調用的結果,該字段爲空。
有人可以解釋一下,爲什麼這樣呢?如何確保字段不爲空,並且在db中沒有嵌入對象字段的數據時(除了在查找調用後手動設置數據)。
可能這是由於您的持久化引擎延遲加載的關聯? – 2010-01-16 08:08:53
我確實使用延遲加載,但這是一個嵌入字段,因此存儲在同一個表中。是否有可能對此進行註釋以獲取熱切? – Dominik 2010-01-16 08:15:17
相關的Hibernate問題(取自已刪除的答案):[HHH-7610:當所有列都爲NULL時將@Embedded字段設置爲空的選項](https://hibernate.atlassian.net/browse/HHH-7610) – sleske 2015-01-30 16:00:25