JPA中EntityManager接口详解

文章详细描述了JavaPersistenceAPI(JPA)中EntityManager接口的各种方法,涉及实体的创建、更新、删除、查询、事务关联以及元数据管理等功能,展示了在Java应用中进行数据库操作的核心组件。
摘要由CSDN通过智能技术生成
public interface EntityManager {
    /**
     * 创建实体,将实体保存到数据库中,也就是将一个Java实体持久化到数据库中
     * 如果不是实体对象或者是游离实体,或者实体已经存在,或者没有关联事务或者事务属性设置为事务类型,抛出异常
     *
     * @param entity 新创建的实体对象
     */
    public void persist(Object entity);

    /**
     * 更新持久化上下文中的实体,并将更新保存到数据库中
     * 如果参数不是实体对象,或者是被删除的实体,或者没有关联事务或者事务属性设置为事务类型,抛出异常
     *
     * @param entity 需要更新的实体
     * @return 更新后的实体
     */
    public <T> T merge(T entity);

    /**
     * 删除实体,将实体从数据库中移除
     * 如果参数不是实体对象,或者是游离实体,或者没有关联事务或者事务属性设置为事务类型,抛出异常
     *
     * @param entity 需要删除的实体对象
     */
    public void remove(Object entity);

    /**
     * 通过实体主键查找实体对象
     * 如果参数entityClass不是实体或主键对象与实体的主键设置不匹配,抛出异常
     *
     * @param entityClass 实体类型
     * @param primaryKey  实体主键对象
     * @return 查询到的实体对象
     */
    public <T> T find(Class<T> entityClass, Object primaryKey);

    public <T> T find(Class<T> entityClass, Object primaryKey, Map<String, Object> properties);

    public <T> T find(Class<T> entityClass, Object primaryKey, LockModeType lockMode);

    public <T> T find(Class<T> entityClass, Object primaryKey, LockModeType lockMode, Map<String, Object> properties);


    /**
     * 与find类似,也是通过实体主键查询实体对象,当查询的实体在数据库中不存在的时候,抛出异常,而不返回null
     *
     * @param entityClass 实体类型
     * @param primaryKey  实体主键对象
     * @return 查询到的实体对象
     */
    public <T> T getReference(Class<T> entityClass, Object primaryKey);

    /**
     * 将实体锁定
     * 如果实体不支持锁定,不是实体对象或者是游离实体,或者没有关联事务或者事务属性设置为事务类型抛出异常
     *
     * @param entity   实体对象
     * @param lockMode 锁定类型
     */
    public void lock(Object entity, LockModeType lockMode);

    public void lock(Object entity, LockModeType lockMode, Map<String, Object> properties);

    /**
     * 将持久化上下文实体保存到数据库中,实现与数据库同步
     * 如果与数据库同步失败,或者没有关联事务或者事务属性设置为事务类型抛出异常
     */
    public void flush();

    /**
     * 设置持久化上下文鱼数据库同步的方式
     *
     * @param flushMode 同步的方式
     */
    public void setFlushMode(FlushModeType flushMode);

    /**
     * 获取当前持久化上下文与数据库同步的方式
     *
     * @return 同步类型
     */
    public FlushModeType getFlushMode();

    /**
     * 将数据库中的数据重新读取到持久化上下文中的实体中,实现与数据库同步
     * 如果参数不是实体对象,或者不是托管实体,或者所重新更新的实体未找到,或者没有关联事务或者事务属性设置为事务类型,抛出异常
     *
     * @param entity 重新读取数据库中的实体对象
     */
    public void refresh(Object entity);

    public void refresh(Object entity, Map<String, Object> properties);

    public void refresh(Object entity, LockModeType lockMode);

    public void refresh(Object entity, LockModeType lockMode, Map<String, Object> properties);

    /**
     * 将持久化上下文中实体全部转变为游离状态,此时还没有被flush,与数据库同步的实体将不会被持久化到数据库中
     */
    public void clear();

    /**
     * 将一个托管状态的实体转变为分离状态。这意味着此实体不再由持久化上下文管理
     * 对该实体的任何更改都不会自动同步到数据库中,但是,实体本身在数据库中的记录保持不变
     * 如果不是实体对象,抛出异常
     *
     * @param entity 需要游离的实体
     */
    public void detach(Object entity);

    /**
     * 当前持久化上下文中是否包含该实体
     * 如果参数不是实体对象抛出异常
     *
     * @param entity 需要判断的实体对象
     * @return 包含返回true
     */
    public boolean contains(Object entity);

    /**
     * 获取给定实体的锁定模式。锁定模式用于控制在并发环境下对实体的访问
     */
    public LockModeType getLockMode(Object entity);

    /**
     * 设置实体管理器属性或提示,如果无法识别特定于供应商的属性或提示,它将被静默忽略
     *
     * @param propertyName 属性名
     * @param value        属性值
     */
    public void setProperty(String propertyName, Object value);

    /**
     * 获取当前持久化上下文的属性。可以用来查看持久化上下文的当前属性设置
     */
    public Map<String, Object> getProperties();

    /**
     * 根据传入的JPQL字符串创建一个查询对象,JPQL类似于SQL,用于查询实体对象
     */
    public Query createQuery(String qlString);

    /**
     * 根据标准查询CriteriaQuery对象,创建一个类型化查询. CriteriaQuery提供了一种类型安全且面向对象的查询方式
     */
    public <T> TypedQuery<T> createQuery(CriteriaQuery<T> criteriaQuery);

    /**
     * 根据更新标准查询对象创建一个查询,用于执行更新操作。
     */
    public Query createQuery(CriteriaUpdate updateQuery);

    /**
     * 根据删除标准查询对象创建一个查询,用于执行删除操作。
     */
    public Query createQuery(CriteriaDelete deleteQuery);

    /**
     * 根据传入的JPQL字符串和结果类型创建一个类型化查询。这个方法允许你指定查询的返回类型。
     */
    public <T> TypedQuery<T> createQuery(String qlString, Class<T> resultClass);

    /**
     * 根据命名查询创建一个查询对象。命名查询是在持久化单元中预定义的查询
     */
    public Query createNamedQuery(String name);

    public <T> TypedQuery<T> createNamedQuery(String name, Class<T> resultClass);

    /**
     * 据SQL查询字符串创建一个查询对象。SQL查询允许你执行原生SQL查询
     */
    public Query createNativeQuery(String sqlString);
    public Query createNativeQuery(String sqlString, Class resultClass);
    public Query createNativeQuery(String sqlString, String resultSetMapping);

    /**
     * 根据命名的存储过程查询创建一个存储过程查询对象
     */
    public StoredProcedureQuery createNamedStoredProcedureQuery(String name);

    /**
     * 根据存储过程名称创建一个存储过程查询对象
     */
    public StoredProcedureQuery createStoredProcedureQuery(String procedureName);
    public StoredProcedureQuery createStoredProcedureQuery(String procedureName, Class... resultClasses);
    public StoredProcedureQuery createStoredProcedureQuery(String procedureName, String... resultSetMappings);


    /**
     * 使实体管理器对象与JTA事务关联
     */
    public void joinTransaction();

    /**
     * 检查当前操作是否已经加入了事务
     */
    public boolean isJoinedToTransaction();

    /**
     * 如果此实现对指定的Class可用,则返回由指定Class表示的实例
     */
    public <T> T unwrap(Class<T> cls);

    /**
     * 获取当前实体管理器具体的实现对象,根据不同的JPA实现者所返回的对象不同
     *
     * @return 实体管理器所实现的对象
     */
    public Object getDelegate();

    /**
     * 关闭当前持久化上下文
     * 如果当前的实体管理器对象与事务关联,或者实体管理是容器负责管理的,也不能关闭,会抛出异常
     */
    public void close();

    /**
     * 判断当前持久化上下文是否打开
     */
    public boolean isOpen();

    /**
     * 获取当前事务管理器所关联的事务处理对象
     */
    public EntityTransaction getTransaction();

    /**
     * 获取EntityManagerFactory实例
     */
    public EntityManagerFactory getEntityManagerFactory();

    /**
     * 获取用于构建标准查询的CriteriaBuilder实例
     */
    public CriteriaBuilder getCriteriaBuilder();

    /**
     * 获取持久化单元的元模型,用于访问实体类的元数据。
     */
    public Metamodel getMetamodel();

    /**
     * 根据给定的根类型创建一个新的实体图,用于定义实体的加载行为
     */
    public <T> EntityGraph<T> createEntityGraph(Class<T> rootType);

    /**
     * 根据给定的图名称创建一个新的实体图
     */
    public EntityGraph<?> createEntityGraph(String graphName);

    /**
     * 获取具有给定名称的实体图
     */
    public EntityGraph<?> getEntityGraph(String graphName);

    /**
     * 获取与给定实体类相关联的所有实体图列表,用于查看实体类的加载行为
     */
    public <T> List<EntityGraph<? super T>> getEntityGraphs(Class<T> entityClass);

}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值