@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[]
  • char[]
  • Character[]
  • 枚举
  • 任意实现 java.io.Serializable 接口的类型

在实体类中,对以上这些类型的属性,如果没有标注 @Basic 注解,则将使用 @Basic 注解的默认值。

参数 类型 描述
fetch FetchType 属性值的加载策略。可选值:
FetchType.EAGER:即时加载;
FetchType.LAZY:延迟加载,当第一次访问属性时才进行数据的加载;
默认为 FetchType.EAGER。
optional boolean 是否允许为 null,默认为 true。

1. 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Entity(name = "person")
public class Person implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@Basic(optional = false, fetch = FetchType.LAZY)
private String mail;
// getters and setters
}

产生的 DDL 语句(MySQL):

1
2
3
4
5
6
CREATE TABLE `person` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`mail` varchar(255) NOT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;