基本注解
@Entity
@Entity(name="user")
public class User {
}
@Table
- 当实体类与其映射的数据库表名不同名时,需要使用@Table标注说明,该注解与@Entity标注并列使用,置于实体类声明语句之前,可写于单独语句行,也可与声明数据同行
- 元数据属性说明
| 名称 | 描述 |
|---|
| name | 表名 |
| catalog | 设置表所属的数据库目录 |
| schema | 设置表所属的数据库模式 |
| uniqueConstraints | 设置约束条件,通常不须设置 |
@Entity
@Table(name="sys_user")
public class User {
}
@Id
- @Id注释用于将Java字段标记为数据库表主键列
- 下面的代码将来自User类的id字段作为数据库中的表user中的主键列
@Id
private Integer id;
@GeneratedValue
- @GeneratedValue用于标注主键的生成策略,通过strategy属性指定
- 在
javax.persistence.GenerationType中定义了以下几种可供选择的策略:
| 名称 | 描述 |
|---|
| IDENTITY | 采用数据库ID自增长的方式来自增主键字段,Oracle不支持这种方式(oracle12g后,应该支持了。) |
| AUTO | JPA自动选择合适的策略,是默认选项 |
| SEQUENCE | 通过序列产生主键,通过@SequenceGenerator注解指定序列名,MySql不支持这种方式 |
| TABLE | 通过表产生键,框架借助由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植 |
- 当使用id字段的自动生成值时,我们可以选择生成策略。我们使用的一个常见策略是IDENTITY
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@Column
- 当实体的属性与其映射的数据库表的列不同名时需要使用@Column标注说明,该属性通常置于实体的属性声明语句之前,还可与@Id标注一起使用
- 元数据属性说明
| 名称 | 描述 |
|---|
| name | 默认情况下,JPA使用字段名作为数据库表列名。我们可以使用Column注释来更改默认值 |
| unique | 表示该字段是否为唯一标识,默认为false |
| nullable | 表示该字段是否可以为null值,默认为true |
| insertable | insertable属性表示在使用“insert”脚本插入数据时,是否需要插入该字段的值 |
| updatable | 使用“update”脚本插入数据时,是否需要更新该字段的值。insertable和updatable属性一般多用于只读的属性,例如主键和外键等。这些字段的值通常是自动生成的 |
| columnDefinition | 表示该字段在数据中的实际类型,通常ORM框架可以根据属性类型自动判断数据中的字段的类型 |
| table | 定义了包含当前字段的表名 |
| length | 设置字段的列长度 |
| precision和scale | precision属性和scale属性表示精度,当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数 |
@Column(columnDefinition="INT DEFAULT 'dduan' COMMENT '用户名'")
private String name;
@Basic
- @Basic表示一个简单的属性到数据库表的字段的映射,对于没有任何标注的getXxx()方法,默认即为Basic
- 元数据属性
| 名称 | 描述 |
|---|
| fetch | 表示该属性的读取策略,有EAGER和LAZY两种,分别表示主支抓取和延迟加载,默认为EAGER |
| optional | 表示该属性是否允许为null,默认为true |
@Transient
- @Transient表示该属性并不是一个到数据库表的字段的映射,指定的这些属性不会被持久化,ORM框架将忽略该属性。
- 如果一个属性并非数据库表的字段映射。就务必将其标示为@Transient。否则,ORM框架默认其注解为@Basic
@Transient
public String getUserInfo(){
return "username: " + name;
}
@Temporal
- 在核心的JAVA API中并没有定义Date类型的精度(temporal precision)。而在数据库中,表示Date类型的数据类型有DATE,TIME和TEIMSTAMP三种精度(即单纯的日期,时间,或者两者兼备)。在运行属性映射是可使用
- @Temporal注解来调整Date精度