对 api 元素含义的权威答案当然是 api 文档,即 javadoc。对于@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[]、Byte[]、char[]、Character[]、枚举以及实现 java.io.Serializable 的任何其他类型。
对于这些类型的持久性字段和属性,基本批注的使用是可选的。如果未为此类字段或属性指定“基本”批注,则将应用“基本”批注的默认值。
基本注释的值是什么?Javadoc也解释了它们:
public abstract FetchType fetch
(可选)定义是应延迟加载字段或属性的值,还是必须紧急获取。EAGER 策略是持久性提供程序运行时的一项要求,即必须热切地获取值。LAZY 策略是对持久性提供程序运行时的提示。如果未指定,则默认为 EAGER。
和
public abstract boolean optional
(可选)定义字段或属性的值是否可以为 null。这是一个提示,对于基元类型是忽略的;它可以用于架构生成。如果未指定,则默认为 true。
因此,如果设置为 ,则当您尝试持久化或更新属性为 null 的对象时,持久性提供程序可能会引发异常。如果您的业务规则说 null 不是合法值,这可能很有用。optional
false
注意
至少在使用休眠时,可以使用相应的 Bean 验证注释(@NotNull
)更好地表示可空性,因为此注释既可以通过休眠来理解,也可以由应用程序上的其他层使用(例如,在验证用户输入时)。