gpt4 book ai didi

java - JPA : Which should I use? 基本(可选)或列(可为空)?

转载 作者:搜寻专家 更新时间:2023-10-30 21:29:33 25 4
gpt4 key购买 nike

对于简单的字符串字段,

@Entity
class Foo {

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

我需要使用 @Column 注释来限制名称的长度,但我对 nullable 属性感到困惑。当我使用其他注释,如 @ManyToOne@OneToMany 时,它们使用 optional 属性,我想使用 @Basic( optional) 以保持大多数注释的统一。但我不能用 @Basic 限制名称的长度。

那么,我应该在哪里注释 nullable 属性,通过 @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 等注释使用,但是 Form 2 也不错,因为它是在单个注释中完成的。

编辑

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

最佳答案

来自 API 文档:

@Basic:

@Basic annotation is the simplest type of mapping to a database column. The Basic annotation can be applied to a persistent property or instance variable of any of the following types: Java primitive types, wrappers of the primitive types, 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[], enums, and any other type that implements Serializable.

@Column

@Column Is used to specify a mapped column for a persistent property or field. If no Column annotation is specified, the default values are applied.

因此,如果您不指定 @Column,它会从 getter/setter 派生列值。如果您需要指定列名,则必须使用 @Column 注释。

@Basic 允许您指定获取类型。如果你想改变默认的抓取类型,你必须使用这个注解,否则你可以省略它。

关于java - JPA : Which should I use? 基本(可选)或列(可为空)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5602908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com