嗯,我有一个关于@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)
没有.@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不会提前检查它.
| 归档时间: |
|
| 查看次数: |
3993 次 |
| 最近记录: |