我在实体类中找到了代码:
@Id
@NotNull
@Column(name = "ID")
private Long id;
当 @Id 已经设置时, @NotNull 注释是否有价值?
答案 0 :(得分:6)
@NotNull
用于验证目的,例如@Size
。它定义了验证引擎的规则,以检查用户输入是否正常。围绕这些注释进行验证并不一定表明该对象也是JPA对象,但两者经常一起使用。
如果你使用的是javax.validation而不是依赖于数据库级别的失败(约束违规)来指示空值,那么你应该使用两个注释。
答案 1 :(得分:1)
由于id / primary key
是表格中最重要的field,因此uniquely
标识表格中的一行。
所以它不应该是null
。
答案 2 :(得分:1)
@Id
用于
* 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>.
因此它不会处理空值。为防止空值@NotNull
与@Id
一起使用。
答案 3 :(得分:1)
是的,这将使您的id字段无法为空,您必须强制要求。
但是如果你想要id自动增量,那么删除它并添加
@GeneratedValue(策略= GenerationType.AUTO)
答案 4 :(得分:0)
我的理解是这是静态分析,与hibernate / orm无关。它是intellij特定的注释吗?
因此,在编译时,当您要将NULL注释为已注释为@NotNull的字段时,可以发出警告。
任何依赖的代码都知道返回的值永远不会为null。