J'observe un comportement très étrange avec une classe d'entité et charge un objet de cette classe avec JPA (hibernate entitymanager 3.3.1.ga). La classe a un champ (imbriqué), qui est initialisé dans la déclaration. Le setter du champ implémente une vérification nulle (c'est-à-dire qu'il lève une exception lorsqu'une valeur nulle est définie).Comportement JPA étrange, champ initialisé est nul
...
@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;
}
...
}
Quand je reçois cet objet avec JPA, le champ est nul, s'il n'y a pas de données dans le DB pour les champs spécifiés dans l'objet incorporé.
...
public class ParticipantJpaDao implements ParticipantDao {
@PersistenceContext
private EntityManager em;
@Override
public Participant getParticipant(Long id) {
return em.find(Participant.class, id);
}
...
}
Je débogué le processus avec un point d'observation sur le terrain (devrait arrêter lors de l'accès ou modifié le champ), et je vois une modification lorsque le champ est initialisé, mais quand je reçois le résultat de l'appel découverte , le champ est nul.
Quelqu'un peut-il expliquer, pourquoi c'est ainsi? Comment puis-je m'assurer que le champ n'est pas nul, même s'il n'y a pas de données pour les champs de l'objet incorporé dans la base de données (en plus de le définir manuellement après l'appel find).
ce pourrait être dû à votre moteur de persistance des associations de chargement paresseux? –
J'utilise un chargement paresseux, mais il s'agit d'un champ intégré, donc stocké dans la même table. Y a-t-il une possibilité d'annoter ceci pour être emporté avec impatience? – Dominik
Problème lié à Hibernate (provenant de la réponse supprimée): [HHH-7610: Option pour définir le champ @Embedded null lorsque toutes les colonnes sont NULL] (https://hibernate.atlassian.net/browse/HHH-7610) – sleske