¿Cuál es la diferencia entre @Basic(optional = false)
y @Column(nullable = false)
en la persistencia de JPA?@Basic (opcional = falso) vs @Column (nullable = falso) en JPA
Respuesta
Gordon Yorke (EclipseLink Comité de Arquitectura miembros, TopLink núcleo de plomo técnico, JPA 2.0 Grupo de Expertos Miembro) escribió una buena respuesta sobre este tema así que en vez de él parafraseando, voy a citar his answer:
La diferencia entre
optional
ynullable
es el alcance en el que se evalúan . La definición de 'optional
' se refiere a la propiedad y los valores de campo y sugiere que esta característica se debe evaluar dentro del tiempo de ejecución . 'nullable
' está solo en referencia a las columnas de la base de datos.Si una aplicación elige a aplicar
optional
entonces esos propiedades deben ser evaluados en memoria por el proveedor de persistencia y una excepción planteada antes de que SQL se envía a la base de datos de otro modo cuando se utiliza 'updatable=false
' 'optional
' las violaciones nunca serían reportadas.
Entonces, ¿cuál debería ser realmente usado, tal vez ambos? –
@Xie Jilei: Del libro: Persistencia de Java con Hibernate 2007, p. 179: '@Basic (opcional = falso) @Column (nullable = false)' La anotación @Basic marca la propiedad como no opcional en el nivel del objeto Java. La segunda configuración, nullable = false en la asignación de columnas, es solo responsable de la generación de una restricción de base de datos NOT NULL. La implementación Hibernate JPA trata ambas opciones de la misma manera en cualquier caso, por lo que puede usar para usar solo una de las anotaciones para este propósito. – rapt
@rapt - No entiendo 'La anotación @Basic marca la propiedad como no opcional en el nivel de objeto Java. ¿Qué significa eso? Entonces, solo '@ Basic' es como decir que la columna de la base de datos' NOT NULL' para dicha variable? –
Así que probé el (opcional = false) anotación @Basic usando JPA 2.1 (EclipseLink) y resulta que la anotación se ignora en el uso real (por lo menos para un campo de cadena). (por ejemplo, llamadas a entityManager.persist).
Así que fui a la especificación y leí sobre ella. Esto es lo que la especificación tiene que decir:
http://download.oracle.com/otndocs/jcp/persistence-2.0-fr-oth-JSpec/
básico (opcional): Si el valor del campo o propiedad puede ser nulo. Esta es una sugerencia y no se tiene en cuenta para los tipos primitivos ; se puede usar en la generación de esquema.
Creo que esta oración explica el caso de uso real para Basic (opcional) que se utiliza en la generación de esquema. (Es decir: cuando genera CREATE TABLE SQL desde clases de Entidad Java. Esto es algo que Hibernate puede hacer, por ejemplo.)
- 1. Cuál es la diferencia entre @ManyToOne (opcional = falso) vs. @Column (nullable = false)
- 2. @OneToOne (opcional = falso) y @JoinColumn (nullable = false) usados juntos
- 3. Falso o Ninguno vs. Ninguno o Falso
- 4. falso/FALSO - ¿alguna diferencia?
- 5. Plantillas Django: Falso vs. Ninguna
- 6. Explicar sobre: insertable = falso, actualizable = falso
- 7. nil || falso y falso || nil en ruby
- 8. JPA/Hibernate: @ManyToOne y @OneToOne relaciones etiquetadas como FetchType.LAZY y opcional = falso no cargando perezosamente en em.find()?
- 9. JPA: ¿Qué debería usar? Básico (opcional) o Columna (nulable)? Para
- 10. Python sentencia if: Falso vs. 0.0
- 11. Compartimiento falso en C++
- 12. ¿Cuál es la diferencia entre falso y FALSO?
- 13. Código correcto para convertir bool [] -> "falso, verdadero, verdadero, falso"
- 14. Diferencia entre guardar (falso) y guardar (: validar => falso)
- 15. Cómo tener PHP FALSO booleano a enviar como FALSO única
- 16. .setAttribute ("deshabilitado", falso); cambia el atributo editable a falso
- 17. Inmediato = verdadero VS inmediato = falso en el componente JSF
- 18. Windows falso micrófono
- 19. View.isHardwareAccelerated() es siempre falso
- 20. correo devuelve falso
- 21. ModelState.IsValid == falso, ¿por qué?
- 22. string.matches (". *") Devuelve falso
- 23. get_browser() devuelve FALSO
- 24. Falso compartir y pthreads
- 25. int.TryParse() devuelve falso para "#. ##"
- 26. falso peticiones HTTP GET
- 27. hacer mientras (falso) patrón
- 28. exit(); morir(); falso retorno;
- 29. SignedXml checksignature devuelve falso
- 30. BaseAdapter: establece hasStableIds() en falso?
duplicado http://stackoverflow.com/questions/1383229/java-persistence-jpa-column-vs -basic – Schildmeijer
No es realmente un duplicado, la pregunta es más sobre los atributos, no las anotaciones. –