Xiè*_*léi 11 java orm hibernate
对于简单的字符串字段
@Entity
class Foo {
//1. @Basic(optional = false)
//2. @Column(length = 100, nullable = false)
String name;
}
Run Code Online (Sandbox Code Playgroud)
我需要使用@Column注释来限制名称的长度,但我对可以为空的属性感到困惑.虽然我正在使用其他注释@ManyToOne和@OneToMany那些使用optional属性,但我想@Basic(optional)用来保持大多数注释均匀.但我不能限制名称的长度@Basic.
那么,我应该在哪里注释可空属性,@Basic或者@Column?
编辑
简单地说,您更喜欢哪种形式:
表格1:
@Entity
class Foo {
@Basic(optional = false)
@Column(length = 100)
String name;
}
Run Code Online (Sandbox Code Playgroud)
表格2:
@Entity
class Foo {
@Column(length = 100, nullable = false)
String name;
}
Run Code Online (Sandbox Code Playgroud)
我个人喜欢Form 1,因为optional属性也被其他@ManyToOne注释使用,但是Form 2也很好,因为它是在单个注释中完成的.
编辑
阅读http://markmail.org/message/osod6rsauwbnkvya后,我@Basic.optional和之间有区别@Column.nullable.但我仍然不知道应该使用哪一个.包含两个注释似乎很好,因此要很好地定义基础表,并在实际更新之前稍微更快地检查JPA中的null.
Red*_*ddy 10
从API文档:
@Basic注释是到数据库列的最简单的映射类型.Basic注释可以应用于以下任何类型的持久属性或实例变量:Java原始类型,基本类型的包装,String,java.math.BigInteger,java.math.BigDecimal,java.util.Date, java.util.Calendar,java.sql.Date,java.sql.Time,java.sql.Timestamp,byte [],Byte [],char [],Character [],枚举以及实现Serializable的任何其他类型.
@Column用于为持久属性或字段指定映射列.如果未指定Column注释,则应用默认值.
因此,如果您没有指定@Column它从getter/setter派生列值.如果需要指定列名,则必须@Column注释.
@Basic允许您指定获取类型.如果要更改默认提取类型,则必须使用此批注,否则可以省略它.