Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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
Java JPA:我应该用哪一种?基本(可选)或列(可空)?_Java_Hibernate_Orm - Fatal编程技术网

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
?那么为什么有两种方法做同一件事呢?可能是重复的