Estoy observando un comportamiento muy extraño con una clase de entidad y cargando un objeto de esta clase con JPA (hibernate entitymanager 3.3.1.ga). La clase tiene un campo (incrustado), que se inicializa en la declaración. El colocador del campo implementa una comprobación nula (es decir, arrojaría una excepción cuando se establece un valor nulo).Comportamiento extraño de JPA, el campo inicializado es nulo
...
@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;
}
...
}
Cuando llego a este objeto con JPA, el campo es nulo, si no hay datos en la base de datos para los campos especificados en el objeto incrustado.
...
public class ParticipantJpaDao implements ParticipantDao {
@PersistenceContext
private EntityManager em;
@Override
public Participant getParticipant(Long id) {
return em.find(Participant.class, id);
}
...
}
que depura el proceso con un punto de observación en el campo (debe detener cuando se accede o se modifica el campo), y veo una modificación cuando se inicializa el campo, pero cuando llegue el resultado de la llamada a find , el campo es nulo.
¿Alguien puede explicar por qué esto es así? ¿Cómo puedo asegurarme de que el campo no sea nulo? También cuando no haya datos para los campos del objeto incrustado en la base de datos (además de configurarlo manualmente después de la llamada de búsqueda).
podría ser esto debido a sus asociaciones carga diferida motor de persistencia? –
Uso carga lenta, pero este es un campo incrustado, por lo tanto, almacenado en la misma tabla. ¿Existe la posibilidad de anotar esto para ser buscado con entusiasmo? – Dominik
Problema de Hibernate relacionado (tomado de la respuesta eliminada): [HHH-7610: Opción para establecer @Embedded field null cuando todas las columnas son NULL] (https://hibernate.atlassian.net/browse/HHH-7610) – sleske