2010-07-26 17 views

Respuesta

67

@Column(nullable=false) es una instrucción para generar el esquema. La columna de la base de datos generada fuera de la clase se marcará como no anulable en la base de datos real.

optional=false es una instrucción en tiempo de ejecución. Lo principal funcional que hace está relacionado con la carga lenta. No puede cargar una entidad asignada que no sea de colección a menos que recuerde establecer optional = false (porque Hibernate no sabe si debe haber un proxy allí o un valor nulo, a menos que indique que los nulos son imposibles, de modo que puede generar un proxy.)

+8

Otro hecho interesante es que la mayoría de los proveedores de persistencia utilizan la información proporcionada por el parámetro "opcional" para optimizar la consulta en tiempo de ejecución. Por ejemplo, al cargar la entidad. Por lo tanto, todas las relaciones de la entidad real especificada con opcional = falso dan como resultado una UNIÓN INTERNA a su respectiva relación cuando se cargan, mientras que las relaciones especificadas con opcional = verdadero dan como resultado UNIONES IZQUIERDAS. – Lars

0

Ambos se usa para prevenir un valor nulo, pero si usted importa que nula debe ser bloqueado en ...

la base de datos capa (y que desea generar el esquema utilizando JPA) -> usar @Column(nullable=false)

el tiempo de ejecución (y antes de contactar con la base de datos) -> usar optional=false (mucho más rápido que la primera comprobación).

Si desea ambas capacidades, úselas ambas.

+0

¿Qué agrega esta respuesta que no se haya dicho ya? – Kawu

+0

** Comprobación de tiempo de ejecución ** de nulo y ** preferencia de rendimiento ** –

+0

El hecho del tiempo de ejecución ya ha sido abordado por Affe: "optional = false es una instrucción en tiempo de ejecución". – Kawu

Cuestiones relacionadas