Sto riscrivendo un codice disordinato che gestisce un database, e vide che il programmatore originale creato una classe mappata al database in questo modo:Costruttore esplicito che usa Lombok?
(codice non necessario ho rimosso che non ha scopo di questa domanda)
Sono ancora un principiante in Hibernate e uso Lombok, ma questo non farebbe la stessa cosa e Lombok non creerà automaticamente il costruttore necessario per te?
@Entity
@Data
@SuppressWarnings("PMD.UnusedPrivateField")
public class PDBEntry implements Serializable {
@Id
@NaturalId
@NotEmpty
@NonNull
@Length(max = 4)
private String accessionCode;
@NaturalId
@NotEmpty
@NonNull
private Date date;
@NaturalId
// We allow for the header to be 'null'
private String header;
private Boolean isValidDssp;
@Temporal(TemporalType.TIMESTAMP)
private Date lastUpdated = new Date(System.currentTimeMillis());
}
Inoltre, il programmatore originale di questo codice dice che consente per l'intestazione di essere 'nulla', eppure ha creato in modo esplicito un costruttore che ha bisogno di un valore per l'intestazione. Mi manca qualcosa o è un po 'contraddittorio?
Sì, ho letto su @RequiredArgsConstructor, ma dal momento che è standard in @Data non l'ho aggiunto. La mia domanda era se usassi correttamente le annotazioni dal momento che il programmatore originale usava Lombok ma non usava le annotazioni @NonNull, ma utilizzava costruttori espliciti. Tu dici che nessuno dei miei campi è @NonNull, ma guarda attentamente nel mio codice (la seconda casella), ho annotato i campi accessionCode e date con @NonNull. Ora poiché Hibernate sembra davvero richiedere un costruttore no-args, sarebbe un buon stile? @ Data @NoArgsConstructor (accesso = AccessLevel.PROTECTED) @RequiredArgsConstructor – FinalArt2005
Sì, sarebbe la strada da percorrere .. – Tim
Ok, solo per chiunque abbia iniziato a usare Lombok, ho appena sentito che @RequiredArgsConstructor non è molto robusto, prende l'ordine dei campi nella tua classe per costruire il costruttore, quindi se qualcun altro cambia questo ordine il tuo codice che chiama il costruttore smette di funzionare, quindi risulta che il costruttore esplicito è ancora la scelta migliore. Il @NoArgsConstructor (access = AccessLevel.PROTECTED) tuttavia sembra essere utile se stai usando Hibernate. Grazie a tutti per il vostro aiuto. – FinalArt2005