Je ne peux pas l'étayer par une quelconque documentation professionnelle, mais voici mon opinion à ce sujet. Je pense que vous avez deux voies possibles à suivre.
DTOs seulement
Le site premier s'appuie sur les Model beans pour être des DTOs simples, utilisés uniquement pour la persistance des données, sans aucune logique. Ici, vous pouvez laissez vos champs POJO non initialisés puisque cela sera fait automatiquement par Hibernate avant que vous ne récupériez l'objet persistant via Session. Je suis sûr que vous savez déjà qu'Hibernate va envelopper silencieusement toutes les collections dans ses propres wrappers, ce qui est nécessaire pour le mécanisme de persistance interne.
Classes de modèles appropriées
La deuxième approche va un peu plus loin avec les POJO. Dans ce scénario, vous pouvez exécuter une certaine logique dans les méthodes getters et setters. Ce scénario n'est pas si rare, après tout il est parfaitement acceptable par MVC et très souvent on se trouve dans la nécessité d'ajouter du code à ces méthodes. Par exemple - enregistrer certaines informations en appelant la méthode setter, exemple ci-dessous :
public void setItems(List<Object> items){
LOGGER.info("Setting '{}' new items", items.size());
this.items = items;
}
Dans ce cas, on pourrait avoir des problèmes, car pour autant que je sache, la collection ne sera pas initialisée par Hibernate à ce stade. Dans ce cas, une initialisation explicite serait préférable.
Dernière remarque : Je ne suis pas l'expert d'Hibernate, je ne sais pas non plus si quelque chose a changé dans la version 4.x, mais je sais que j'ai enduré ce problème à un moment donné.