2010-02-25 20 views

Respuesta

12

Ambos se asignarán al mismo tipo de columna. Desde la perspectiva de la memoria, un primitivo probablemente sería un poco más liviano, pero la diferencia casi seguramente será insignificante. Creo que un primitivo lo haría no anulable, pero también podrías hacerlo con una anotación.

+0

Gracias, me quedaré con el tipo de datos java para evitar el manejo especial de nulos – Sam

9

Derecho de Kaleb: si alguna consulta devuelve un valor nulo para "habilitado" (en este caso), entonces tiene que usar el objeto en lugar de la primitiva.

Esto es de la FAQ Hibernate:

A PropertyAccessException a menudo se produce cuando el objeto que se pasa al método setter es del tipo equivocado. Verifique las asignaciones de tipo para la propiedad ofensiva. (Para ver exactamente qué propiedad era el problema, es posible que deba desactivar el optimizador de reflexión CGLIB). Sin embargo, la causa más común de este problema es que Hibernate intentó asignar null a una propiedad de tipo primitivo.

Si su objeto tiene una propiedad de tipo primitivo mapeada a una columna de base de datos nullable, necesitará usar un tipo personalizado de Hibernate para asignar un valor predeterminado (primitivo) para el caso de un valor de columna nulo. Una mejor solución suele ser utilizar un tipo de envoltorio para la propiedad Java.

https://www.hibernate.org/116.html

20

Por lo general se recomienda usar los tipos primitivos, sólo para deshacerse de los cheques nulos por todo el lugar. Pero realmente depende de lo que quieras decir. Su booleana ahora puede contener 3 valores:

  1. cierto
  2. falsa
  3. nula

Y nula puede hacer un total nueva semántica cuando se trata de entidades. Usualmente lo uso como "Sin datos disponibles". Su "habilitado" podría ser un mal ejemplo para este tipo de campo. Pero digamos que tienes un número que tiene la edad de una persona.

private Integer age; 

Cuando utiliza null, puede tratar esto como: "Desconocido". También podría usar un int y definir un valor especial (-1) para este caso, pero null es la solución más natural.

Entonces, para resumir. Utilice primitivas si siempre hay un valor significativo (¿campos obligatorios?) Y clases contenedoras para valores opcionales.

Cuestiones relacionadas