JPA API

1. Persistence

  1. createEntityManagerFactory方法
    • 该方法就是这个类的最主要的作用:创建EntityManagerFactory对象,它需要传入你配置文件中配置的persistence-unitname属性的值
    • 重载方法:有两个参数(不常用,了解即可)
      • 第一个:配置文件中的persistence-unitname属性的值
      • 第二个:Map类型,用于设置 JPA 的相关属性。如果提供这个参数,将忽略其他地方设置的同名属性。
        • Map 对象的属性名必须是JPA实现库提供商约定的属性名

2. EntityManagerFactory

  • 类似于hibernate中的SessionFactory
  1. createEntityManager方法
    • 用于创建EntityManager对象
  2. close方法
    • 用于关闭EntityManagerFactory对象,释放资源

3. EntityManager

  • 类似于hibernate中的Session
  • 持久层对象的状态(与hibernate一样)
    1. 新建:新创建的对象,尚未拥有持久化主键
    2. 持久化:已经拥有持久化主键并和持久化建立了上下文环境
    3. 游离:拥有持久化主键,但是没有与持久化环境建立上下文环境
    4. 删除:拥有持久化主键,已经和持久化建立上下文环境,但是已经从数据库中删除
  1. <T> T find(Class<T> entityClass, Object primaryKey)

    • 根据主键查询对象

    • 类似于hibernateSessionget方法:立即加载

  2. <T> T getReference(Class<T> entityClass, Object primaryKey)

    • 根据主键查询对象

    • 类似于hibernateSessionload方法:懒加载

    • 查询到的对象的类型:cn.ann.entity.User_$$_jvst368_0 ----> 是一个代理对象

      • 代表着:在使用这个对象之前,EntityManager不能关闭,否则会报 no session 异常,和hibernate一样
  3. void persist(Object entity):前提是设置了主键生成策略

    • 类似于hibernateSessionsave方法:使对象转换为持久态
    • hibernateSession中的save()的不同:如果对象有id,不能执行 insert 操作,会报异常
  4. void remove(Object entity)

    • 类似于hibernateSessiondelete():从数据库中移除对象
    • 不同的是:它只能移除持久化对象,hibernatedelete也可以删除游离态对象
  5. <T> T merge(T entity)

    • 总的来说:类似于hibernateSessionsaveOrUpdate方法
      1. 若传入一个临时对象
        • 会创建一个新的对象,把临时对象的属性复制到新的对象中,然后i对新的对象进行持久化操作,所以新的对象中有 id,但是传入的临时对象没有
      2. 若传入的是一个游离对象:传入的对象有id
        1. 若在EntityManager缓存中没有该对象数据库中也没有对应的记录,JPA会创建一个新的对象,然后把当前游离对象的属性复制到新创建的对象中,然后对新创建的对象执行持久化操作(相当于id无效)
        2. 若在EntityManager缓存中没有该对象,但是数据库中有对应的记录,JPA会查询对应记录,然后把当前游离对象的属性复制到查询出来的对象中,然后对查询的对象执行update操作
        3. 若在EntityManager缓存中有对应的对象,JPA会把游离对象的属性复制到EntityManager缓存中的对象中,然后对缓存中的对象执行update操作
    • 相同点在于:hibernate和 JPA 的两个方法都不能同时关联两个id一样的持久态对象
    • 不同在于:hibernate没有复制的操作,所以,执行更新操作的时候会直接报异常,但是 JPA 有复制的操作,更新操作可以执行
  6. 其他方法

    1. void flush()
      • 强制发送sql语句,同步持久上下文环境,需要事务,但是不需要事务提交
    2. void setFlushMode(FlushModeType flushMode)
      • 设置持久上下文环境的flush模式,参数:
        1. FlushModeType.AUTO:自动更新数据库实体
        2. FlushModeType.COMMIT:直到提交事务时才会更新数据库记录
    3. FlushModeType getFlushMode()
      • 获取持久上下文环境的flush模式
    4. void refresh(Object entity)
      • 用数据库实体记录的值更新实体对象的状态,即:更新实例的属性值
    5. void clear()
      • 清除持久上下文环境,断开所有关联的实体。会撤销未提交的更新
    6. boolean contains(Object entity)
      • 判断一个实例是否属于当前持久上下文环境管理的实体
    7. boolean isOpen()
      • 判断当前实体管理器是否是打开状态
    8. EntityTransaction getTransaction()
      • 返回资源层的事务对象,返回的对象可以用于开始和提交多个事务
    9. void close()
      • 关闭实体管理器。
  7. 和查询语句相关

    1. Query createQuery(String qlString)
      • 创建一个查询对象
    2. Query createNamedQuery(String name)
      • 根据命名的查询语句块创建查询对象。参数为命名的查询语句
    3. Query createNativeQuery(String sqlString)
      • 使用标准的sql语句创建查询对象。参数为标准的sql语句字符串
    4. Query createNativeQuery(String sqlString, String resultSetMapping)
      • 使用标准的sql语句创建查询对象,并指定返回结果集Map的名称
  8. EntityTransaction:其实就是JPA里面的事务

    1. void begin()
      • 开启事务。与hibernate的区别是该方法并不会返回事务对象,就意味着必须先获取到事务对象才能进行操作
    2. void commit()
      • 提交事务
    3. void rollback()
      • 回滚事务

本节代码点击此处

posted @ 2019-12-11 14:02  _ann  阅读(104)  评论(0编辑  收藏  举报