Les membres de l'entité devraient-ils être des types de données primitifs ou des types de données java?
Est-il une différence lors de la déclaration de la variable Booléen booléen ou? Ce qui est préférable à partir d'une empreinte mémoire perspective.
@Entity
class User {
@Column
Boolean enabled;
}
source d'informationauteur Sam
Vous devez vous connecter pour publier un commentaire.
Ils vont à la fois la carte pour le même type de colonne. À partir d'un point de vue de la mémoire, une primitive serait sans doute un peu plus léger, mais la différence est presque certainement va être négligeable. Je pense qu'une primitive de la rendrait non nullable, mais vous pouvez aussi le faire avec une annotation.
J'avais l'habitude de suggérer d'utiliser les types primitifs, juste pour se débarrasser de nulle vérifie tous sur la place. Mais cela dépend vraiment de ce que vous voulez dire. Votre Boolean maintenant peut contenir 3 valeurs:
Et la valeur null peut faire un total de nouvelles sémantiques lorsqu'ils traitent avec des entités. J'ai l'habitude de l'utiliser comme "Aucune donnée disponible". Votre "activé" est peut-être un mauvais exemple pour ce genre de domaine. Mais disons que vous avez un nombre qui détient l'âge d'une personne.
Lorsque vous utilisez null, vous pouvez considérer ceci comme: "Inconnu". Vous pouvez également utiliser un int et de définir une valeur spéciale (-1) pour ce cas, mais la valeur null est la solution la plus logique.
Donc, pour résumer. L'utilisation de primitives si il y a toujours une valeur raisonnable (champs requis?) et les classes wrapper pour les valeurs facultatives.
Kaleb droit si toutes les requêtes renvoient une valeur null pour "activé" (dans ce cas), alors vous devez utiliser l'objet plutôt que de la primitive.
C'est à partir de la veille prolongée FAQ:
Un PropertyAccessException se produit souvent lorsque l'objet est transmis à la méthode setter est de type incorrect. Vérifiez votre type de correspondances pour les délinquance de la propriété. (Pour voir exactement où la propriété est le problème, vous devrez peut-être désactiver la CGLIB réflexion optimiseur.) Cependant, la cause la plus courante de ce problème est que Hibernate tenté d'affecter la valeur null à une propriété de type primitif.
Si votre objet a une primitive de type propriété mappé à un nullable colonne de base de données, alors vous aurez besoin d'utiliser Hibernate type personnalisé pour affecter une valeur par défaut raisonnable (primitive) de la valeur pour le cas d'une valeur de la colonne null. Une meilleure solution consiste généralement à utiliser un wrapper type de la propriété Java.
https://www.hibernate.org/116.html