4. JPA @Id 和 @GeneratedValue 注解详解
2016-03-03 14:13
639 查看
@Id:
@Id 标注用于声明一个实体类的属性映射为数据库的主键列。该属性通常置于属性声明语句之前,可与声明语句同行,也可写在单独行上。
@Id标注也可置于属性的getter方法之前。
@GeneratedValue:
@GeneratedValue 用于标注主键的生成策略,通过strategy 属性指定。默认情况下,JPA 自动选择一个最适合底层数据库的主键生成策略:SqlServer对应identity,MySQL 对应 auto increment。
在javax.persistence.GenerationType中定义了以下几种可供选择的策略:
–IDENTITY:采用数据库ID自增长的方式来自增主键字段,Oracle 不支持这种方式;
–AUTO: JPA自动选择合适的策略,是默认选项;
–SEQUENCE:通过序列产生主键,通过@SequenceGenerator 注解指定序列名,MySql不支持这种方式
–TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。
推荐的两种写法:
属性之上:
getter方法之上:
但是不能某个注解在属性之上,某个注解在getter之上,将抛出异常,对其他注解也相同
上面的写法是错误的
@Id 标注用于声明一个实体类的属性映射为数据库的主键列。该属性通常置于属性声明语句之前,可与声明语句同行,也可写在单独行上。
@Id标注也可置于属性的getter方法之前。
@GeneratedValue:
@GeneratedValue 用于标注主键的生成策略,通过strategy 属性指定。默认情况下,JPA 自动选择一个最适合底层数据库的主键生成策略:SqlServer对应identity,MySQL 对应 auto increment。
在javax.persistence.GenerationType中定义了以下几种可供选择的策略:
–IDENTITY:采用数据库ID自增长的方式来自增主键字段,Oracle 不支持这种方式;
–AUTO: JPA自动选择合适的策略,是默认选项;
–SEQUENCE:通过序列产生主键,通过@SequenceGenerator 注解指定序列名,MySql不支持这种方式
–TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。
推荐的两种写法:
属性之上:
@Table(name="CUSTOMERS") @Entity public class Customer { @GeneratedValue(strategy=GenerationType.AUTO) @Id private Integer id; private String name; private String email; private int age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; }
getter方法之上:
@Table(name="CUSTOMERS") @Entity public class Customer { private Integer id; private String name; private String email; private int age; @GeneratedValue(strategy=GenerationType.AUTO) @Id public Integer getId() { return id; } public void setId(Integer id) { this.id = id; }
但是不能某个注解在属性之上,某个注解在getter之上,将抛出异常,对其他注解也相同
@Table(name="CUSTOMERS") @Entity public class Customer { @Id private Integer id; private String name; private String email; private int age; @GeneratedValue(strategy=GenerationType.AUTO) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; }
上面的写法是错误的
相关文章推荐
- 解析JPA的视图查询问题
- Spring 4 with JPA (Hibernate 4/EclipseLink)
- EJB3 事务控制
- JPA复杂实体关系的构建
- JPA实体代码生成器
- JPA查询返回子句
- 初步认识JPA
- hibernate jpa 注解 @Temporal(TemporalType.DATE) 日期注解
- JPA入门教程【转】
- java JPA入门以及遇到的问题
- spring jpa 集成
- springmvc4+spring data jpa
- 记jpa、json问题之:handler and unable to find...by id ..
- spring data jpa 标准查询的项目代码结构
- 数据过滤器注解@Filter 如何在hibernate、spring data jpa中调用
- spring boot 集成框架事例
- Hibernate4之主键映射机制
- Hibernate4之一对多双向关联
- Hibernate4之一对一关联