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
如果我在JPA JAVA中同时使用这些注释呢?_Java_Jpa_Orm - Fatal编程技术网

如果我在JPA JAVA中同时使用这些注释呢?

如果我在JPA JAVA中同时使用这些注释呢?,java,jpa,orm,Java,Jpa,Orm,我完全不理解这些注释之间的区别。 如果这是多余的,你能解释一下吗 @NotNull @Basic(optional = false) @Column(nullable = false) private int userId; 提前感谢。@NotNull:您正在定义的注释是,除了null参数外,代码将不会删除任何其他注释,如果您提供null参数,注释将引发RuntimeException @基本:此注释表示要持久化属性,并使用标准映射。它有一些参数,允许您指定是否延迟加载属性以及属性是否可

我完全不理解这些注释之间的区别。 如果这是多余的,你能解释一下吗

@NotNull 
@Basic(optional = false)  
@Column(nullable = false)
private int userId;

提前感谢。

@NotNull:您正在定义的注释是,除了null参数外,代码将不会删除任何其他注释,如果您提供null参数,注释将引发RuntimeException

@基本:此注释表示要持久化属性,并使用标准映射。它有一些参数,允许您指定是否延迟加载属性以及属性是否可为空


@Column允许您在数据库中指定要将属性持久化到的列的名称。

以下是我注意到的区别

@NotNull来自javax.validation JSR303,它定义bean的属性是否可以为null,设置该属性表示属性不能为null,这称为约束,并在validation.validate()方法中进行验证

@Basic(optional=false)来自javax.persistence JSR317,有基本类型和集合类型,它表示逻辑模型可以为null或不设置为false可选表示属性在jpa逻辑模型上不能为null。还允许您声明属性的获取策略

@Column(nullable=false)来自javax.persistence JSR317,它与数据库的物理映射(DDL)有关,告诉数据库该属性在数据库中不能为null。(表创建中的NOTNULL语句)

正如您所看到的,第一个应用于验证API,第二个和第三个应用于JPA API,但一个应用于逻辑模式,另一个应用于物理模式。

可能重复: