是否有理由将@NotNull注释放在Java实体类的@Id字段中

时间:2013-04-03 11:43:09

标签: java jpa bean-validation

我在实体类中找到了代码:

@Id
@NotNull
@Column(name = "ID")
private Long id;

@Id 已经设置时, @NotNull 注释是否有价值?

5 个答案:

答案 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。