问题 JPA:我应该使用哪个?基本(可选)或列(可空)?


对于简单的字符串字段

@Entity
class Foo {

    //1. @Basic(optional = false)
    //2. @Column(length = 100, nullable = false)
    String name;
}

我需要使用限制名称的长度 @Column 注释,但我与可空属性混淆。虽然我正在使用其他注释 @ManyToOne 和 @OneToMany 那些使用 optional 属性,我想用 @Basic(optional) 保持大多数注释均匀。但我无法限制名称的长度 @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;
}

我个人喜欢Form 1,因为 optional 属性也被使用 @ManyToOne 注释,但是表单2也很好,因为它是在单个注释中完成的。

编辑

看完之后 http://markmail.org/message/osod6rsauwbnkvya,我有区别 @Basic.optional 和 @Column.nullable。但我仍然不知道应该使用哪一个。包含两个注释似乎很好,因此要明确定义基础表,并在实际更新之前检查JPA中的null可能稍快一些。


2585
2018-04-09 04:38


起源

可能重复 JPA中的@Basic(可选= false)vs @Column(nullable = false) - rds


答案:


来自API文档:

@basic:

@Basic注释是最简单的类型   映射到数据库列。该   基本注释可以应用于a   持久属性或实例   以下任何一项的变量   types: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 允许您指定获取类型。如果要更改默认提取类型,则必须使用此批注,否则可以省略它。


10
2018-04-09 04:49



看到 stackoverflow.com/questions/2899073/... - Reddy
@Reddy - 所以,只有 @Basic 就像说要创建数据库列 NOT NULL 对于所述变量?那么为什么有两种方法可以做同样的事情呢? - Borat Sagdiyev