私はデータベースを管理する厄介なコードを書き直していて、元のプログラマーが次のようにデータベースにマップされたクラスを作成したことを確認しました。
(この質問で目的のない不要なコードを削除しました)
@Entity
@Data
@EqualsAndHashCode(callSuper = false, of = { "accessionCode", "header", "date" })
@SuppressWarnings("PMD.UnusedPrivateField")
public class PDBEntry implements Serializable {
@Id
@NaturalId
@NotEmpty
@Length(max = 4)
private String accessionCode;
@NaturalId
@NotEmpty
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());
protected PDBEntry(){}
public PDBEntry(String accessionCode, String header, Date date){
this.accessionCode = accessionCode;
this.header = header;
this.date = date;
}
}
私はまだHibernateの初心者であり、Lombokを使用していますが、これは同じことを行い、Lombokは必要なコンストラクターを自動的に作成しませんか?
@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());
}
また、このコードの元のプログラマーは、ヘッダーを「null」にすることを許可していると述べていますが、ヘッダーの値を必要とするコンストラクターを明示的に作成しました。私は何かが足りないのですか、それともこれは少し矛盾していますか?