Я наблюдаю очень странное поведение с классом сущности и загружаю объект этого класса с JPA (hibernate entitymanager 3.3.1.ga). Класс имеет (встроенное) поле, которое инициализируется в объявлении. Установщик поля реализует нулевую проверку (т.е. Генерирует исключение, когда задано значение 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, поле имеет значение NULL, если в db нет данных для полей, указанных во встроенном объекте.
...
public class ParticipantJpaDao implements ParticipantDao {
@PersistenceContext
private EntityManager em;
@Override
public Participant getParticipant(Long id) {
return em.find(Participant.class, id);
}
...
}
Я отлаживал процесс с точкой наблюдения в поле (должен останавливаться, когда к нему обращались или изменялись), и я вижу одну модификацию, когда поле инициализируется, но когда я получаю результат от вызова поиска, это поле нуль.
Может кто-нибудь объяснить, почему это так? Как я могу гарантировать, что поле не является нулевым, также когда нет данных для полей внедренных объектов в db (кроме того, чтобы установить его вручную после вызова поиска).