ho trovato codice nella classe entità:alcun motivo per mettere l'annotazione @NotNull campo @Id in Java classe di entità
@Id
@NotNull
@Column(name = "ID")
private Long id;
è @NotNull annotazione hanno valore quando @Id già impostati?
ho trovato codice nella classe entità:alcun motivo per mettere l'annotazione @NotNull campo @Id in Java classe di entità
@Id
@NotNull
@Column(name = "ID")
private Long id;
è @NotNull annotazione hanno valore quando @Id già impostati?
@NotNull
è per scopi di convalida, come @Size
. Definisce le regole per un motore di convalida per verificare se l'input dell'utente è ok. Fare una convalida attorno a queste annotazioni non indica necessariamente che l'oggetto sia anche un oggetto JPA, ma i due sono spesso usati insieme.
Se si utilizza javax.validation anziché fare affidamento su errore a livello di database (violazioni dei vincoli) per indicare valori nulli, è necessario utilizzare entrambe le annotazioni.
Grazie +1. La maggior parte della risposta diretta. – gavenkoa
La mia comprensione è questa per l'analisi statica e non ha nulla a che fare con l'ibernazione/orm. È l'annotazione specifica intellij?
Così al momento della compilazione puoi essere avvisato quando stai per assegnare NULL a un campo che è stato annotato come @NotNull.
E qualsiasi codice che è dipendente sa che il valore restituito non sarà mai nullo.
Viene da JSR303 (convalida dei bean), che è come JPA anche solo parte di Java EE. – BalusC
Dal id/primary key
è il più importante field nella tabella, è uniquely
identificare una riga nella tabella.
Quindi non dovrebbe essere null
.
@Id
è usato per
* Specifies the primary key of an entity.
* The field or property to which the <code>Id</code> annotation is applied
* should be one of the following types: any Java primitive type;
* any primitive wrapper type;
* <code>String</code>;
* <code>java.util.Date</code>;
* <code>java.sql.Date</code>;
* <code>java.math.BigDecimal</code>;
* <code>java.math.BigInteger</code>.
Così non si prende cura di valori nulli. Per evitare valori nulli, viene utilizzato @NotNull
insieme a @Id
.
Grazie. +1. Ho letto http://docs.oracle.com/javaee/6/api/javax/validation/constraints/NotNull.html e http://docs.oracle.com/javaee/6/api/javax/persistence/Id. html ma questo non mi aiuta a capire ... – gavenkoa
Permettere una chiave primaria nullo sarebbe una violazione delle specifiche SQL. – Powerlord
Sì, questo renderà il campo id non annullabile e devi darlo obbligatorio.
Ma se si vuole id per AutoIncrement quindi rimuoverlo e aggiungere
@GeneratedValue (strategia = GenerationType.AUTO)
Se si utilizza un valore o una sequenza autoincrementata del database, non utilizzare l'annotazione '@ NotNull'. Genera un'eccezione quando si tenta di mantenere l'entità. – greenkode
Hm ... Semplifico il codice, ma quello originale ha '@ SequenceGenerator' e' @ GeneratedValue' e non ci sono errori in runtime sugli inserti ... Sembra che diverse librerie e versioni si comportino diversamente. Grazie per l'interesse +1. – gavenkoa