10
votes

Null vs collections vides dans hibernate

Dire que j'ai la suivante classe Hibernate cartographiée:

public class ClassA {       
   @OneToMany(fetch=EAGER)
   private List<ClassB> bList;
}


0 commentaires

3 Réponses :


11
votes

Avez-vous essayé de vérifier la méthode getblist ()? Vous pouvez faire:

if(bList.isEmpty()) 
    return null;
return bList;


1 commentaires

Je pense que cela peut finir par être la solution la plus simple, oui



2
votes

Je suis curieux pourquoi vous considérez cela une «limitation» - un blist NULL a réellement un signification à votre application qu'un blist vide < / code>?

Je pense que dans la plupart des régions, une collection nulle et une collection vide ont le même sens sémantique, que je devinerais, c'est pourquoi les développeurs hibernés ont cherché à limiter l'hibernate à l'utilisation d'un. N'a pas beaucoup de sens de toujours vérifier si (blist == null || blist.isempty) si les deux finissent toujours par le sens de la même chose.


1 commentaires

C'est la plupart des situations, vous seriez correct, mais les clients de ce modèle d'objet particulier distinguent entre NULL et VIDE, et je n'ai aucun contrôle sur cela.



2
votes

Pour la manipulation de votre code, la manière évidente est dans le getter, mais cela ne vous aide pas si vous souhaitez l'évaluer dans HQL.

Deux idées:

  • un constructeur qui le fixe à null si vide.
  • A @pospostCharnet / @postConstruct méthode qui fait la même chose.

1 commentaires

Ah, je n'étais pas au courant de @postload, j'aime ça. Comment cela interagit-il avec @postConstruct?