Java JPA:我应该用哪一种?基本(可选)或列(可空)?
对于简单字符串字段Java JPA:我应该用哪一种?基本(可选)或列(可空)?,java,hibernate,orm,Java,Hibernate,Orm,对于简单字符串字段 @Entity class Foo { //1. @Basic(optional = false) //2. @Column(length = 100, nullable = false) String name; } 我需要使用@Column注释来限制名称的长度,但我对null属性感到困惑。当我使用诸如@manytone和@OneToMany等使用可选属性的注释时,我想使用@Basic(可选)来保持大多数注释的一致性。但是我不能用@Basic限制
@Entity
class Foo {
//1. @Basic(optional = false)
//2. @Column(length = 100, nullable = false)
String name;
}
我需要使用@Column
注释来限制名称的长度,但我对null属性感到困惑。当我使用诸如@manytone
和@OneToMany
等使用可选属性的注释时,我想使用@Basic(可选)
来保持大多数注释的一致性。但是我不能用@Basic
限制名称的长度
那么,我应该在哪里通过@Basic
或@Column
注释可空属性呢
编辑
简单地说,您喜欢哪种形式:
表格1:
@Entity
class Foo {
@Basic(optional = false)
@Column(length = 100)
String name;
}
表格2:
@Entity
class Foo {
@Column(length = 100, nullable = false)
String name;
}
就我个人而言,我喜欢表单1,因为optional
属性也被@manytone
等注释使用,但是表单2也很好,因为它是在单个注释中完成的
编辑
阅读之后,我得到了@Basic.optional
和@Column.nullable
之间的区别。但我还是不知道该用哪一个。两个注释都包含似乎很好,因此要定义好基础表,并在实际更新之前在JPA中检查null,可能会稍微快一点。来自API文档:
@基本注释是最简单的类型
映射到数据库列的方法。这个
基本注释可以应用于
持久属性或实例
以下任何一项的变量
类型:Java基本类型、包装器
基本类型的字符串,
java.math.biginger,
java.math.BigDecimal、java.util.Date、,
java.util.Calendar、java.sql.Date、,
java.sql.Time,java.sql.Timestamp,
字节[],字节[],字符[],字符[],
枚举,以及任何其他
实现可序列化
@列用于指定映射的
持久性属性或属性的列
领域如果未指定任何列注释
指定时,默认值为
应用
所以,如果不指定@Column
,它将从getter/setter派生列值。
如果需要指定列名,则必须@column
注释
@Basic
允许您指定提取类型。如果您想更改默认的抓取类型,您必须使用此注释,否则您可以忽略它。请参见@Reddy-So,只有@Basic
类似于说,使所述变量的数据库列不为NULL
?那么为什么有两种方法做同一件事呢?可能是重复的