Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有任何理由在Java实体类的@Id字段上放置@NotNull注释_Java_Jpa_Bean Validation - Fatal编程技术网

是否有任何理由在Java实体类的@Id字段上放置@NotNull注释

是否有任何理由在Java实体类的@Id字段上放置@NotNull注释,java,jpa,bean-validation,Java,Jpa,Bean Validation,我在实体类中找到了代码: @Id @NotNull @Column(name = "ID") private Long id; 当设置了@Id时,@NotNull注释是否有价值?我的理解是,这是用于静态分析,与hibernate/orm无关。它是intellij特定的注释吗 因此,在编译时,当您将要为注释为@NotNull的字段分配NULL时,可能会收到警告 任何依赖的代码都知道返回的值永远不会为空。由于id/primary key在表中是最重要的,因此它可以唯一地标识表中的一行 所以它不应该

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

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

当设置了@Id时,@NotNull注释是否有价值?

我的理解是,这是用于静态分析,与hibernate/orm无关。它是intellij特定的注释吗

因此,在编译时,当您将要为注释为@NotNull的字段分配NULL时,可能会收到警告


任何依赖的代码都知道返回的值永远不会为空。

由于
id/primary key
在表中是最重要的,因此它可以
唯一地标识表中的一行


所以它不应该是空的

@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

一起使用。是,这将使您的Id字段不可为空,您必须将其设置为必填字段

但如果您想让id自动递增,请将其删除并添加


@GeneratedValue(strategy=GenerationType.AUTO)

@NotNull
用于验证目的,如
@Size
。它定义了验证引擎检查用户输入是否正常的规则。围绕这些注释进行验证并不一定表明该对象也是一个JPA对象,但这两者通常一起使用


如果您使用的是javax.validation,而不是依赖于数据库级别的故障(违反约束)来指示空值,那么您应该同时使用这两种注释。

如果您使用的是数据库自动递增值或序列,那么您不应该使用
@NotNull
注释。当您尝试持久化实体时,它将引发异常。嗯。。。我简化了代码,但原始代码有
@SequenceGenerator
@GeneratedValue
,并且在运行时插入时没有任何错误。。。似乎不同的库和版本表现不同。谢谢你的关心+1.谢谢+1.我读过,但这并不能帮助我理解…允许一个空主键将违反SQL规范。它来自JSR303(Bean验证),这就像JPA也是Java EE的一部分。谢谢+1。最直接的回答。