JPA学习笔记二:jpa注解学习,以及TABLE主键生成策略

    xiaoxiao2025-04-12  38

    文章目录

    1. JPA学习笔记二:jpa注解学习1.1. @Entity1.2. @Table1.3. @Id映射主键的1.4. @GeneratedValue1.5. @Basic1.6. @Column1.7. @Transient1.8. @Temporal1.9. 主键生成策略:TABLE

    1. JPA学习笔记二:jpa注解学习

    1.1. @Entity

    用来标注实体类的,用该注解后,该类就会变成实体类。 就表示可以跟一个数据库表对应了。如果不加@Table注解,表明该类名就是表名。

    1.2. @Table

    这个与表名对应,一般要与@Entity一起写。 @Table(name="表名")

    1.3. @Id映射主键的

    这个映射数据库表中的主键的,该注解通常写在声明属性之前,也可以写在get()方法之前。

    1.4. @GeneratedValue

    用于标注主键的生成策略,通过Strategy属性指定,默认情况下JPA自动选择一个最适合底层数据库的主键生成策略:sqlServer对应identity,mysql对应auto incrementjavax.persistence.GenerationType中定义了几种可选的策略。 IDENTITY:采用数据库ID自增长的方式来自增主键字段,Oracle不支持这种方式。AUTO:JPA自动选择合适的策略,是默认选项。SEQUENCE:通过序列产生主键,通过@SequenceGenerator注解指定序列名,Mysql不支持这种方式。TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。

    1.5. @Basic

    表示一个简单的 属性到数据库表的字段的映射,对没有任何标注的getxx()方法,默认即为@Basicfetch :表示该属性的读取策略,有EAGER和LAZY两种,分别表示主支抓取,和延迟加载,默认为EAGER.optional:表示该属性是否允许为null,默认为true。

    1.6. @Column

    该注解用于表明数据库列名和实体类属性名的映射关系,该标注还有多个属性,包含unique,nullable(可为空),length等,该标注还有一个columnDefinition属性,通常ORM框架可以根据属性类型自动判断数据库字段的类型,但是Date类型无法确定数据库中的字段类型是Date,time,还是timeStamp。String类型默认对应Varchar,如果数据库中的字段类型为blob或者是Text那么就需要ColumnDefinition来具体描述了。可以与@Id同时使用,也可以在getxx()方法上添加。

    1.7. @Transient

    表明该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性。如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM框架默认其注解为@Basic

    1.8. @Temporal

    由于在java API中没有定义Date类型的精度,而数据库中有时间的精度,例如Date,Time,TIMESTAMP三种精度,即:单纯的日期,时间,和两者兼备。那么在进行属性映射时可以使用@Temporal注解来调整精度。 @Temporal(TemporalType.DATE)

    1.9. 主键生成策略:TABLE

    这个主键的生成策略是,在数据库中建立一个表,根据这个表里的属性值,经过一定的算法创建一个主键生成机制。例如创建一个jpa_id_generator,里面包含三个字段,ID,PK_NAME,PK_VALUE.

    代码 其中pkColumnName和pkColumnValue确定一个值。 @TableGenerator(name="ID_GENERATOR", table="jpa_id_generators", pkColumnName="PK_NAME", pkColumnValue="CUSTOMER_ID", valueColumenName="PK_Value", allocationSize=100) @GeneratedValue(strategy=GenerationType.TABLE,generator="ID_GENERATOR")
    最新回复(0)