jpa配置自动生成表策略分为四种:

先删除表,再创建表,再删除表

  2、create 先删除表,再创建表 如果更改了domain类会立即生效

  3、update  没有对应表则根据映射关系创建表

        表中存在某属性,修改属性长度时不会对表进行更新,需要更新该列时,先删除该列,这时映射表中的这个列属性才会更新到表中

  4、validate 表不存在时会抛出异常,domain字段映射比表的列多时会抛异常,反之则不会  项目上线时的配置最好设置成这个

 

常用的jpa注解:

  1、@Entity 类上的注解,注明是该类是实体映射,如果需要自定义表名使用         @Table(name='tableName'),不写默认使用类名作为表名

  2、@id 该字段是主键,与之匹配的注解--@GeneratedValue---> (代理主键)

    主键生成策略(auto-主键生成策略交给jpa处理、

      IDENTITY-主键由数据库自动插入、

      SEQUENCE-Oracle不支持ID自增长列,使用序列的机制生成主键ID

      TABLE-不清楚干什么的,不怎么使用),

     如果没有配置主键生成策略则@Id注解的字段的值必须存在且唯一(也叫做自然主键)

  3、@Column 该字段是表中的列映射 -->属性有length、nullable@等 例如:             @Cloumn(insertable=false,columnDefinition="int(11)default'25'")           表明该字段不出现在insert语句中,且默认值长度11位,默认值'25'

  4、@Temporal(TemportalType.TIMESTAMP) 时间字段,参数是时间类型

  5、@Lob 大文本字段

  6、@Transient 表明该字段只是一个临时属性,不持久化到数据库

 

JPA持久对象的状态:

  1、临时状态(transient),没有被持久化,不处于entityManager中

  2、持久化状态(persistent),已经被持久化加入到entityManager的一级缓存中

  3、游离状态(deached)已经被持久化,但不处于entityManager中

  4、删除状态(removed)只有调用entityManager.delete(domain)方法,对象有关联ID并且在entityManager管理下,这时是被计划删除,事务提交就正式删除

 

脏数据更新:一个持久状态的对象在事务管理器内,如果改变原来的数据(主键的值不变),此时出现脏数据,在提交事务的时候会自动发出update语句去修改。

使用jpa时注意的几个点:

  1、类不能定义为final类

  2、所有属性的类型都必须是包装类

  3、必须有默认的无参构造方法