Java Spring中@Entity类的注释顺序

Java Spring中@Entity类的注释顺序,java,spring,jpa,spring-boot,annotations,Java,Spring,Jpa,Spring Boot,Annotations,听起来可能是个有趣的问题,但我在别处找不到答案:@Entity类字段上注释的顺序重要吗 我说的是注释,比如 @Column(name = "password") @Length(min = 5, message = "*Your password must have at least 5 characters") @NotEmpty(message = "*Please provide your password") @Transient private String password; 或

听起来可能是个有趣的问题,但我在别处找不到答案:@Entity类字段上注释的顺序重要吗

我说的是注释,比如

@Column(name = "password")
@Length(min = 5, message = "*Your password must have at least 5 characters")
@NotEmpty(message = "*Please provide your password")
@Transient
private String password;


从功能上讲,顺序无关紧要。
从阅读的角度来看,这当然很重要。
当您查看实体字段时,您希望了解有关的一般情况。
例如,它在数据库中的映射或使用的集合关系

通常,这个问题很重要,因为您需要为同一个字段声明一定数量的注释(在您的示例中至少有4个)

一些明智的想法:

  • 应在实体之间的代码中一致地指定它们
  • 使最一般的注释(例如,
    @Column
    @ManyToOne
    等)比最具体的注释(例如验证注释)更为可见
  • 组相关注释。例如,与验证相关的注释应该分组,与另一个实体关联的类似注释也应该分组
从一般到具体,并一起验证:

@Column(name = "pass")
@Transient
@Length(min = 5, message = "*Your password must have at least 5 characters")
@NotEmpty(message = "*Please provide your password")
private String password;
@Length(min = 5, message = "*Your password must have at least 5 characters")
@NotEmpty(message = "*Please provide your password")
@Transient
@Column(name = "pass")
private String password;
或从特定到一般,并一起验证:

@Column(name = "pass")
@Transient
@Length(min = 5, message = "*Your password must have at least 5 characters")
@NotEmpty(message = "*Please provide your password")
private String password;
@Length(min = 5, message = "*Your password must have at least 5 characters")
@NotEmpty(message = "*Please provide your password")
@Transient
@Column(name = "pass")
private String password;
以混乱的顺序显示更具可读性:

@Length(min = 5, message = "*Your password must have at least 5 characters")
@Column(name = "pass")
@Transient
@NotEmpty(message = "*Please provide your password")
private String password;

通常,最好按照下表中确定的顺序进行操作:

按照您的示例,它可能是:

@Column(name = "password")
@Transient
@NotEmpty(message = "*Please provide your password")
private String password;

@Column(name = "created_at", columnDefinition = "DATETIME")
@Temporal(TemporalType.TIMESTAMP)
@CreationTimestamp 
private Date createdAt;

但正如我所知,它没有既定的惯例。不。没关系。呃,不?您是想做一些特别的事情,比如根据注释的顺序应用特定的语义还是其他什么?比如,您是否试图确保长度验证在非空验证之前进行?谢谢您的回答!不,我更感兴趣的是任何潜在的副作用,或者是否有一些约定(好的编码风格)。谢谢链接,梅特。