- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
对于简单的字符串字段,
@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 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 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/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!