@Entity
@Entity标注的java类为实体类,将映射到指定的数据库中
@Table
当实体类于映射的数据库表不同名时需要使用@Table标注来说明,常用属性是nama,值为改实体类所对应的的数据库表名
@Id
@Id标注的属性为数据库的主键列,也可标注在该属性的getter方法之前
@GeneratedValue
@GeneratedValue用于标注主键的生成策略,通过strategy属性指定,默认情况下,JPA自动选择一个适合底层数据库的主键生成策略,SqlServer对应identity,MySql对应auto increment
在javax。persistence。GenerationType中定义了一下集中可供选择的策略
- IDENTITY:采用数据库ID自增长的方式来自增主键,Oracle不支持这种方式
- AUTO:JPA自动选择合适的增长策略,是默认选项;
- SEQUENCCE:通过序列产生主键,通过 @SequenceGenerator注解指定序列名,MySql不支持这种方式
- TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以是应用更易于数据库移植
-
@TableGenerator(name="ID_GENERATOR",//该主键生成策略名称,他被引用在@GeneratedValue中设置的generator的值 table="jpa_id_generators",//表示表生成策略所用的数据库表名 pkColumnName="PK_NAME",//表示在生成策略所用表中该主键生成策略所对应的键值的名称 pkColumnValue="CUSTOMER_ID",//表示在生成策略所用表中该生成策略对应的主键 valueColumnName="PK_VALUE",//属性的值表示在持久化表中,该主键当前所生成的值,它的值将会随着每次创建累加 allocationSize=100)//表示每次主键值增加的大小, 默认值为 50 @GeneratedValue(strategy=GenerationType.TABLE,generator="ID_GENERATOR")
-
@Basic
没有任何标注的getter方法,默认即为@Basic
@Column
标注在属性值上,name指定数据库对应的列明
@Transient
标注在属性上,表明该属性不是数据库对应的字段
@Temporal
java API中并没有定义 Date类型的精度,而在数据库中,表示 Date类型的数据有Date(日期),Time(时间),TimeStamp(日期+时间)三种精度,在进行属性映射的时候可以使用@Temporal来调节Date的精度
@Temporal(TemporalType.TIMESTAMP)