在编写实体类时使用@Basic(optional = false)

MMM*_*MMM 4 java orm jpa

嗯,我有一个关于@Basic(可选= false)@NotNull表示法的问题.

通常,我们会在实体类中编写变量,如下所示:

模拟代码:

@Basic(optional = false)
@NotNull
@Column(name = USERNAME)
private String userName;
Run Code Online (Sandbox Code Playgroud)

上面的表示法描述了对于字段用户名,它不接受NULL值.

通常,@ Basic(可选= false)符号后跟@NotNull表示法,但是如果我想要一个字段,那么就说userID,它是一个自动增量类型,它也是主键,我应该刚写下如下代码?

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = USERID)
private Integer userID;
Run Code Online (Sandbox Code Playgroud)

或者删除@Basic(可选= false)

编辑

最新代码:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = USERID)
private Integer userID;
Run Code Online (Sandbox Code Playgroud)

还有一个问题是,只有@Basic(可选= false)@Botic(可选= false)相同,后续是@NotNull吗?

代码如下:

代码1

@Basic(optional = false)
@NotNull
@Column(name = USERNAME)
private String userName;
Run Code Online (Sandbox Code Playgroud)

代码2

@Basic(optional = false)
@Column(name = USERNAME)
private String userName;
Run Code Online (Sandbox Code Playgroud)

rad*_*dai 6

没有.@Id替换@Basic- 使用一个或另一个.@GeneratedValue只能陪伴@Id.

@NotNull 与JPA无关,您可以将它放在任何您想要的地方.

上NOTNULL更多信息VS列注解-在解释这个问题,NOTNULL和列注释属性来自不同的地方(Bean验证VS持久性)和处理对象的生命周期的不同方面:

@NotNull是一个bean验证注释,指定该属性必须包含某些值.如果在您的设置中启用了hibernate-validator集成,则hibernate 可以在将实体持久化到数据库之前检查这一点,但也可能完全忽略它.一路上的各种其他框架(API层中的jax-rs实现等)也可以检查你的bean以验证@NotNull是否成立.在生成数据库模式并使列不可为空时,hibernate 也可能会注意到这个注释,但它绝不需要这样做.

@Column是JPA注释,仅处理您的属性如何映射到数据库.没有其他的.你可以使一个列不可为空,仍然将空值传递给hibernate.当hibernate尝试插入/更新你的数据时,它会导致数据库的运行时异常,但是hibernate不会提前检查它.