Qual è la differenza tra @Basic(optional = false)
e @Column(nullable = false)
in persistenza JPA?@Basic (opzionale = false) vs @Column (nullable = false) in JPA
risposta
Gordon Yorke (EclipseLink Comitato Architettura Stati, TopLink Nucleo Technical Lead, JPA 2.0 Expert Group Stati) ha scritto una buona risposta su questo argomento così, invece di lui parafrasando, citerò his answer:
La differenza tra
optional
enullable
è l'ambito in cui vengono valutati gli . La definizione di 'optional
' parla di proprietà e valori di campo e suggerisce che questa funzione debba essere valutata all'interno del runtime . 'nullable
' è solo nel riferimento alle colonne del database.Se l'applicazione sceglie di implementare
optional
poi quelle proprietà devono essere valutati in di memoria da parte del provider di persistenza e un'eccezione sollevata prima di SQL viene inviato al database altrimenti quando si utilizza 'updatable=false
' 'optional
' le violazioni non sarebbero mai state segnalate.
Quindi, che dovrebbe essere usato davvero, forse entrambi? –
@Xie Jilei: Dal libro: Java persistence con hibernate 2007, p. 179: '@Basic (facoltativo = falso) @Column (nullable = false)' L'annotazione @Basic contrassegna la proprietà come non facoltativa sul livello dell'oggetto Java . La seconda impostazione, nullable = false nella mappatura della colonna, è solo responsabile della generazione di un vincolo del database NOT NULL. L'implementazione di JPA di Hibernate tratta entrambe le opzioni nello stesso modo, quindi è possibile utilizzare come solo una delle annotazioni per questo scopo. – rapt
@rapt - Non capisco 'L'annotazione @Basic contrassegna la proprietà come non facoltativa a livello di oggetto Java. Che cosa significa? Quindi, solo '@ Basic' è come dire che rendere la colonna del database' NOT NULL' per detta variabile? –
così ho provato il (= false opzionale) annotazione @Basic utilizzando JPA 2.1 (EclipseLink) e si scopre l'annotazione viene ignorato in effettivo utilizzo (almeno per un campo di stringa). (ad esempio chiamate entityManager.persist).
Quindi sono andato alle specifiche e ho letto tutto. Ecco cosa le specifiche ha da dire:
http://download.oracle.com/otndocs/jcp/persistence-2.0-fr-oth-JSpec/
di base (opzionale): se il valore del campo o della proprietà può essere null. Questo è un suggerimento e non viene preso in considerazione per i tipi primitivi ; può essere usato nella generazione dello schema.
Quindi penso che questa frase spieghi il caso di utilizzo reale per Basic (facoltativo) utilizzato nella generazione dello schema. (Ovvero: quando generi CREATE TABLE SQL dalle classi di entità Java. Questo è qualcosa che Hibernate può fare per esempio.)
- 1. Perché dovrei specificare @Column (nullable = false)?
- 2. EJB3 - @Column (insertable = "false") domanda
- 3. Persistenza Java/JPA: @Column vs @Basic
- 4. JPA @Id e insertable = false, aggiornabile = false genera l'eccezione
- 5. SQLAlchemy set default nullable = False
- 6. String è Nullable restituisce false
- 7. Objective-C TRUE/FALSE vs true/false
- 8. HiddenInput (DisplayValue = false)] vs [ScaffoldColumn (false)]
- 9. Perché False == False in [False] restituisce True?
- 10. Assert vs. return false?
- 11. ValidateInput (false) vs AllowHtml
- 12. Doctrine 2 non può usare nullable = false in manyToOne relation?
- 13. Spiegazione: insertable = false, aggiornabile = false
- 14. false/FALSE - nessuna differenza?
- 15. Python if: False vs 0.0
- 16. se vs if (x == false) in Ruby
- 17. Perché {} == false valutare su false while [] == false restituisce true?
- 18. Laravel Basic HTTP Auth Controlla Restituzione di False
- 19. JPA map JSON column to Java Object
- 20. Perché 0 == [], ma 0 == false e! [] == false?
- 21. Promise findOneAsync variable = {"isFulfilled": false, "isRejected": false}?
- 22. se (booleano == false) vs. se (booleano!)
- 23. Serializzazione Xml vs. "True" e "False"
- 24. event.preventDefault() vs. return false (no jQuery)
- 25. Modalità di rilascio vs Debug = "false"
- 26. Java Swing dispose() vs. setVisible (false)
- 27. PHP memory_get_usage (false) vs memory_get_usage (true)
- 28. Aggiungi automaticamente insertable = false, updatable = false` alle entità generate da Netbeans
- 29. @RestResource (exported = false) ignorato
- 30. Come avere PHP FALSE booleano da emettere come FALSE solo
duplicato http://stackoverflow.com/questions/1383229/java-persistence-jpa-column-vs -basico – Schildmeijer
Non proprio un duplicato, la domanda riguarda più gli attributi, non le annotazioni. –