爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      hibernate session接口

      首页 知识中心 软件开发 文章详情页

      hibernate session接口

      2024-04-15 06:58:08 阅读次数:50

      session,数据库,缓存

      hibernate session接口

      Session接口是hibernate向应用程序提供的操纵数据库的最主要的接口,提供了保存、更新、删除和加载Java对象的方法。

      session具有一个缓存,位于缓存中的对象成为持久化对象,和数据库中的相关记录对应。session能够在某些时间点,按照缓存中对象的变化来执行相关的SQL语句,来同步更新数据库,这一过程称为刷新缓存(flush)。

      hibernate把对象分为4种状态,持久化状态,临时状态,游离状态,删除状态。session的特定方法可以使对象进行状态转换

      session缓存

      session实例没有结束生命周期,且没有清理缓存,则存放在session缓存中的对象也不会结束生命周期,session缓存可以减少访问数据库的频率。

      操作session缓存
      flush方法

      缓存中对象同步到数据库(会插入或更新数据库),使数据库中的状态与缓存中一致

      注意:

      session在以下情况下会刷新缓存

      • hibernate在事务提交之前会执行flush()方法,然后再向数据库提交事务

      • 显示调用session.flush()方法

      • 在执行HQL或者QBC查询,会先进行flush()操作,以得到数据表最新的记录

      refresh方法

      将数据库同步到缓存中(会查询数据库),使缓存中的状态与数据库一致

      session.refresh(); 
      clear方法

      清理缓存,可以将session中的缓存清除

      session.clear();

      四种状态的转换

      临时状态(Transient)

      • 在使用代理主键的情况下,OID通常为null
      • 不处于session缓存中
      • 在数据库中也没有对应的记录,此时刚new了一个实体对象,还存在于保存临时数据的内存区域中

      持久化状态(Persist)

      • OID不为null
      • 位于session缓存中
      • 若在数据库中已经有和其对应的记录,持久化对象和数据库中的相关记录对应
      • session在flush缓存时,会根据持久化对象的属性变化,来同步数据库
      • 在同一个session实例的缓存中,数据库表中每条记录只对应唯一的持久化对象
      • 持久化对象的id不可以被修改,因为hibernate是根据id去进行比较的

      删除状态(Removed)

      • 在数据库中没有和其OID对应的记录
      • 不再处于session缓存中

      游离状态(Detached)

      • OID不为null
      • 不再处于session缓存中
      • 一般情况下,游离对象是由持久化对象转变过来的(session进行close、clear、evict等情况),数据库中可能还存在它对应的记录,但是因为会话已经消失,对象不在持久化管理之内,所以处于游离状态
      hibernate session接口
      hibernate四种状态转换
      save方法和persist方法的区别

      在调用persist()方法时如果存在id,则会抛出异常,而save方法则可以正常执行

      org.hibernate.PersistentObjectException: detached entity passed to persist
      get方法和load方法的区别
      • 执行get方法会立即加载对象,执行load方法若不使用该对象,则不会立即查询,而是返回一个代理对象(延时加载)

      • 若数据表中没有对应的记录,get方法返回null,load方法抛出异常

        org.hibernate.ObjectNotFoundException: No row with the given identifier exists
      • load方法可能会抛出懒加载异常

        org.hibernate.LazyInitializationException: could not initialize proxy - no Session

      注意:在session缓存中不能够有两个相同OID的对象,否则会报异常

      public static void testOid(Session session){
        User user = (User) session.get(User.class,1);
        System.out.println(user);
        User user1  = new User();
        user1.setId(1);
        user1.setName("王五");
        session.saveOrUpdate(user1);
      }

      org.hibernate.NonUniqueObjectException: A different object with the same identifier value was already associated with the session
      evict方法

      从session缓存中将指定的持久化对象移除

      hibernate获取原生JDBC连接进行操作

      可以使用doWork或者doReturnWork来使用原生JDBC操作数据

      session.doWork(new Work() {
        @Override
        public void execute(Connection connection) throws SQLException {

        }
      });

      session.doReturningWork(new ReturningWork<Object>() {
        @Override
        public Object execute(Connection connection) throws SQLException {
          return null;
        }
      });

      session方法说明

      public interface Session extends SharedSessionContract {
         /**
          * Obtain a {@link Session} builder with the ability to grab certain information from this session.
          *
          * @return The session builder
          */

         public SharedSessionBuilder sessionWithOptions();

         /**
          * Force this session to flush. Must be called at the end of a
          * unit of work, before committing the transaction and closing the
          * session (depending on {@link #setFlushMode(FlushMode)},
          * {@link Transaction#commit()} calls this method).
          * <p/>
          * <i>Flushing</i> is the process of synchronizing the underlying persistent
          * store with persistable state held in memory.
          *
          * @throws HibernateException Indicates problems flushing the session or
          * talking to the database.
          */

         public void flush() throws HibernateException;

         /**
          * Set the flush mode for this session.
          * <p/>
          * The flush mode determines the points at which the session is flushed.
          * <i>Flushing</i> is the process of synchronizing the underlying persistent
          * store with persistable state held in memory.
          * <p/>
          * For a logically "read only" session, it is reasonable to set the session's
          * flush mode to {@link FlushMode#MANUAL} at the start of the session (in
          * order to achieve some extra performance).
          *
          * @param flushMode the new flush mode
          * @see FlushMode
          */

         public void setFlushMode(FlushMode flushMode);

         /**
          * Get the current flush mode for this session.
          *
          * @return The flush mode
          */

         public FlushMode getFlushMode();

         /**
          * Set the cache mode.
          * <p/>
          * Cache mode determines the manner in which this session can interact with
          * the second level cache.
          *
          * @param cacheMode The new cache mode.
          */

         public void setCacheMode(CacheMode cacheMode);

         /**
          * Get the current cache mode.
          *
          * @return The current cache mode.
          */

         public CacheMode getCacheMode();

         // 获取创建该会话的sessionFactory
         public SessionFactory getSessionFactory();

         // 关闭数据库连接
         public Connection close() throws HibernateException;

         // 取消当前查询的执行
         public void cancelQuery() throws HibernateException;

         // 当前session是否开启
         public boolean isOpen();

         // 当前session是否连接
         public boolean isConnected();

         // 该session中是否包含必须与数据库痛的变化
         public boolean isDirty() throws HibernateException;

         /**
          * Will entities and proxies that are loaded into this session be made 
          * read-only by default?
          *
          * To determine the read-only/modifiable setting for a particular entity 
          * or proxy:
          * @see Session#isReadOnly(Object)
          *
          * @return true, loaded entities/proxies will be made read-only by default; 
          *         false, loaded entities/proxies will be made modifiable by default. 
          */

         public boolean isDefaultReadOnly();

         /**
          * Change the default for entities and proxies loaded into this session
          * from modifiable to read-only mode, or from modifiable to read-only mode.
          *
          * Read-only entities are not dirty-checked and snapshots of persistent
          * state are not maintained. Read-only entities can be modified, but
          * changes are not persisted.
          *
          * When a proxy is initialized, the loaded entity will have the same
          * read-only/modifiable setting as the uninitialized
          * proxy has, regardless of the session's current setting.
          *
          * To change the read-only/modifiable setting for a particular entity
          * or proxy that is already in this session:
          * @see Session#setReadOnly(Object,boolean)
          *
          * To override this session's read-only/modifiable setting for entities
          * and proxies loaded by a Query:
          * @see Query#setReadOnly(boolean)
          *
          * @param readOnly true, the default for loaded entities/proxies is read-only;
          *                 false, the default for loaded entities/proxies is modifiable
          */

         public void setDefaultReadOnly(boolean readOnly);

         // 返回与当前实体关联的会话标识符
         public Serializable getIdentifier(Object object);

         /**
          * Check if this instance is associated with this <tt>Session</tt>.
          *
          * @param object an instance of a persistent class
          * @return true if the given instance is associated with this <tt>Session</tt>
          */

         public boolean contains(Object object);

         /**
          * Remove this instance from the session cache. Changes to the instance will
          * not be synchronized with the database. This operation cascades to associated
          * instances if the association is mapped with <tt>cascade="evict"</tt>.
          *
          * @param object The entity to evict
          *
          * @throws NullPointerException if the passed object is {@code null}
          * @throws IllegalArgumentException if the passed object is not defined as an entity
          */

         public void evict(Object object);

         /**
          * Return the persistent instance of the given entity class with the given identifier,
          * obtaining the specified lock mode, assuming the instance exists.
          *
          * @param theClass a persistent class
          * @param id a valid identifier of an existing persistent instance of the class
          * @param lockMode the lock level
          *
          * @return the persistent instance or proxy
          *
          * @deprecated LockMode parameter should be replaced with LockOptions
          */

         @Deprecated
         public Object load(Class theClass, Serializable id, LockMode lockMode);

         /**
          * Return the persistent instance of the given entity class with the given identifier,
          * obtaining the specified lock mode, assuming the instance exists.
          *
          * @param theClass a persistent class
          * @param id a valid identifier of an existing persistent instance of the class
          * @param lockOptions contains the lock level
          * @return the persistent instance or proxy
          */

         public Object load(Class theClass, Serializable id, LockOptions lockOptions);

         /**
          * Return the persistent instance of the given entity class with the given identifier,
          * obtaining the specified lock mode, assuming the instance exists.
          *
          * @param entityName a persistent class
          * @param id a valid identifier of an existing persistent instance of the class
          * @param lockMode the lock level
          *
          * @return the persistent instance or proxy
          *
          * @deprecated LockMode parameter should be replaced with LockOptions
          */

         @Deprecated
         public Object load(String entityName, Serializable id, LockMode lockMode);

         /**
          * Return the persistent instance of the given entity class with the given identifier,
          * obtaining the specified lock mode, assuming the instance exists.
          *
          * @param entityName a persistent class
          * @param id a valid identifier of an existing persistent instance of the class
          * @param lockOptions contains the lock level
          *
          * @return the persistent instance or proxy
          */

         public Object load(String entityName, Serializable id, LockOptions lockOptions);

         /**
          * Return the persistent instance of the given entity class with the given identifier,
          * assuming that the instance exists. This method might return a proxied instance that
          * is initialized on-demand, when a non-identifier method is accessed.
          * <br><br>
          * You should not use this method to determine if an instance exists (use <tt>get()</tt>
          * instead). Use this only to retrieve an instance that you assume exists, where non-existence
          * would be an actual error.
          *
          * @param theClass a persistent class
          * @param id a valid identifier of an existing persistent instance of the class
          *
          * @return the persistent instance or proxy
          */

         public Object load(Class theClass, Serializable id);

         /**
          * Return the persistent instance of the given entity class with the given identifier,
          * assuming that the instance exists. This method might return a proxied instance that
          * is initialized on-demand, when a non-identifier method is accessed.
          * <br><br>
          * You should not use this method to determine if an instance exists (use <tt>get()</tt>
          * instead). Use this only to retrieve an instance that you assume exists, where non-existence
          * would be an actual error.
          *
          * @param entityName a persistent class
          * @param id a valid identifier of an existing persistent instance of the class
          *
          * @return the persistent instance or proxy
          */

         public Object load(String entityName, Serializable id);

         /**
          * Read the persistent state associated with the given identifier into the given transient
          * instance.
          *
          * @param object an "empty" instance of the persistent class
          * @param id a valid identifier of an existing persistent instance of the class
          */

         public void load(Object object, Serializable id);

         /**
          * Persist the state of the given detached instance, reusing the current
          * identifier value.  This operation cascades to associated instances if
          * the association is mapped with {@code cascade="replicate"}
          *
          * @param object a detached instance of a persistent class
          * @param replicationMode The replication mode to use
          */

         public void replicate(Object object, ReplicationMode replicationMode);

         /**
          * Persist the state of the given detached instance, reusing the current
          * identifier value.  This operation cascades to associated instances if
          * the association is mapped with {@code cascade="replicate"}
          *
          * @param entityName The entity name
          * @param object a detached instance of a persistent class
          * @param replicationMode The replication mode to use
          */

         public void replicate(String entityName, Object object, ReplicationMode replicationMode) ;

         // 保存对象,生成标识,变为持久化状态
         public Serializable save(Object object);

         // 保存对象,生成标识,变为持久化状态
         public Serializable save(String entityName, Object object);

         // 保存或更新对象
         public void saveOrUpdate(Object object);

         // 保存或更新对象
         public void saveOrUpdate(String entityName, Object object);

         // 更新该标识符所对应的对象
         public void update(Object object);

         
         // 更新该标识符所对应的对象
         public void update(String entityName, Object object);

         /**
          * Copy the state of the given object onto the persistent object with the same
          * identifier. If there is no persistent instance currently associated with
          * the session, it will be loaded. Return the persistent instance. If the
          * given instance is unsaved, save a copy of and return it as a newly persistent
          * instance. The given instance does not become associated with the session.
          * This operation cascades to associated instances if the association is mapped
          * with {@code cascade="merge"}
          * <p/>
          * The semantics of this method are defined by JSR-220.
          *
          * @param object a detached instance with state to be copied
          *
          * @return an updated persistent instance
          */

         public Object merge(Object object);

         /**
          * Copy the state of the given object onto the persistent object with the same
          * identifier. If there is no persistent instance currently associated with
          * the session, it will be loaded. Return the persistent instance. If the
          * given instance is unsaved, save a copy of and return it as a newly persistent
          * instance. The given instance does not become associated with the session.
          * This operation cascades to associated instances if the association is mapped
          * with {@code cascade="merge"}
          * <p/>
          * The semantics of this method are defined by JSR-220.
          *
          * @param entityName The entity name
          * @param object a detached instance with state to be copied
          *
          * @return an updated persistent instance
          */

         public Object merge(String entityName, Object object);

         /**
          * Make a transient instance persistent. This operation cascades to associated
          * instances if the association is mapped with {@code cascade="persist"}
          * <p/>
          * The semantics of this method are defined by JSR-220.
          *
          * @param object a transient instance to be made persistent
          */

         public void persist(Object object);
         /**
          * Make a transient instance persistent. This operation cascades to associated
          * instances if the association is mapped with {@code cascade="persist"}
          * <p/>
          * The semantics of this method are defined by JSR-220.
          *
          * @param entityName The entity name
          * @param object a transient instance to be made persistent
          */

         public void persist(String entityName, Object object);

         // 删除该持久化对象
         public void delete(Object object);

         // 删除该持久化对象
         public void delete(String entityName, Object object);

         /**
          * Obtain the specified lock level upon the given object. This may be used to
          * perform a version check (<tt>LockMode.READ</tt>), to upgrade to a pessimistic
          * lock (<tt>LockMode.PESSIMISTIC_WRITE</tt>), or to simply reassociate a transient instance
          * with a session (<tt>LockMode.NONE</tt>). This operation cascades to associated
          * instances if the association is mapped with <tt>cascade="lock"</tt>.
          *
          * @param object a persistent or transient instance
          * @param lockMode the lock level
          *
          * @deprecated instead call buildLockRequest(LockMode).lock(object)
          */

         @Deprecated
         public void lock(Object object, LockMode lockMode);

         /**
          * Obtain the specified lock level upon the given object. This may be used to
          * perform a version check (<tt>LockMode.OPTIMISTIC</tt>), to upgrade to a pessimistic
          * lock (<tt>LockMode.PESSIMISTIC_WRITE</tt>), or to simply reassociate a transient instance
          * with a session (<tt>LockMode.NONE</tt>). This operation cascades to associated
          * instances if the association is mapped with <tt>cascade="lock"</tt>.
          *
          * @param entityName The name of the entity
          * @param object a persistent or transient instance
          * @param lockMode the lock level
          *
          * @deprecated instead call buildLockRequest(LockMode).lock(entityName, object)
          */

         @SuppressWarnings( {"JavaDoc"})
         @Deprecated
         public void lock(String entityName, Object object, LockMode lockMode);

         /**
          * Build a LockRequest that specifies the LockMode, pessimistic lock timeout and lock scope.
          * timeout and scope is ignored for optimistic locking.  After building the LockRequest,
          * call LockRequest.lock to perform the requested locking. 
          * <p/>
          * Example usage:
          * {@code session.buildLockRequest().setLockMode(LockMode.PESSIMISTIC_WRITE).setTimeOut(60000).lock(entity);}
          *
          * @param lockOptions contains the lock level
          *
          * @return a lockRequest that can be used to lock the passed object.
          */

         public LockRequest buildLockRequest(LockOptions lockOptions);

         // 从数据库中重新读取该对象
         public void refresh(Object object);

         /**
          * Re-read the state of the given instance from the underlying database. It is
          * inadvisable to use this to implement long-running sessions that span many
          * business tasks. This method is, however, useful in certain special circumstances.
          * For example
          * <ul>
          * <li>where a database trigger alters the object state upon insert or update
          * <li>after executing direct SQL (eg. a mass update) in the same session
          * <li>after inserting a <tt>Blob</tt> or <tt>Clob</tt>
          * </ul>
          *
          * @param entityName a persistent class
          * @param object a persistent or detached instance
          */

         public void refresh(String entityName, Object object);

         /**
          * Re-read the state of the given instance from the underlying database, with
          * the given <tt>LockMode</tt>. It is inadvisable to use this to implement
          * long-running sessions that span many business tasks. This method is, however,
          * useful in certain special circumstances.
          *
          * @param object a persistent or detached instance
          * @param lockMode the lock mode to use
          *
          * @deprecated LockMode parameter should be replaced with LockOptions
          */

         @Deprecated
         public void refresh(Object object, LockMode lockMode);

         /**
          * Re-read the state of the given instance from the underlying database, with
          * the given <tt>LockMode</tt>. It is inadvisable to use this to implement
          * long-running sessions that span many business tasks. This method is, however,
          * useful in certain special circumstances.
          *
          * @param object a persistent or detached instance
          * @param lockOptions contains the lock mode to use
          */

         public void refresh(Object object, LockOptions lockOptions);

         /**
          * Re-read the state of the given instance from the underlying database, with
          * the given <tt>LockMode</tt>. It is inadvisable to use this to implement
          * long-running sessions that span many business tasks. This method is, however,
          * useful in certain special circumstances.
          *
          * @param entityName a persistent class
          * @param object a persistent or detached instance
          * @param lockOptions contains the lock mode to use
          */

         public void refresh(String entityName, Object object, LockOptions lockOptions);

         /**
          * Determine the current lock mode of the given object.
          *
          * @param object a persistent instance
          *
          * @return the current lock mode
          */

         public LockMode getCurrentLockMode(Object object);

         // 为给定集合和查询条件创建查询实例
         public Query createFilter(Object collection, String queryString);

         // 清除该会话
         public void clear();

         // 返回给定命名和标识符的持久化对象实例
         public Object get(Class clazz, Serializable id);

         

         /**
          * Return the persistent instance of the given entity class with the given identifier,
          * or null if there is no such persistent instance. (If the instance is already associated
          * with the session, return that instance. This method never returns an uninitialized instance.)
          * Obtain the specified lock mode if the instance exists.
          *
          * @param clazz a persistent class
          * @param id an identifier
          * @param lockOptions the lock mode
          *
          * @return a persistent instance or null
          */

         public Object get(Class clazz, Serializable id, LockOptions lockOptions);

         // 返回给定命名和标识符的持久化对象实例
         public Object get(String entityName, Serializable id);

         /**
          * Return the persistent instance of the given entity class with the given identifier,
          * or null if there is no such persistent instance. (If the instance is already associated
          * with the session, return that instance. This method never returns an uninitialized instance.)
          * Obtain the specified lock mode if the instance exists.
          *
          * @param entityName the entity name
          * @param id an identifier
          * @param lockOptions contains the lock mode
          *
          * @return a persistent instance or null
          */

         public Object get(String entityName, Serializable id, LockOptions lockOptions);

         /**
          * Return the entity name for a persistent entity.
          *   
          * @param object a persistent entity
          *
          * @return the entity name
          */

         public String getEntityName(Object object);
         
         /**
          * Create an {@link IdentifierLoadAccess} instance to retrieve the specified entity type by
          * primary key.
          * 
          * @param entityName The entity name of the entity type to be retrieved
          *
          * @return load delegate for loading the specified entity type by primary key
          *
          * @throws HibernateException If the specified entity name cannot be resolved as an entity name
          */

         public IdentifierLoadAccess byId(String entityName);

         /**
          * Create an {@link IdentifierLoadAccess} instance to retrieve the specified entity by
          * primary key.
          *
          * @param entityClass The entity type to be retrieved
          *
          * @return load delegate for loading the specified entity type by primary key
          *
          * @throws HibernateException If the specified Class cannot be resolved as a mapped entity
          */

         public IdentifierLoadAccess byId(Class entityClass);

         /**
          * Create an {@link NaturalIdLoadAccess} instance to retrieve the specified entity by
          * its natural id.
          * 
          * @param entityName The entity name of the entity type to be retrieved
          *
          * @return load delegate for loading the specified entity type by natural id
          *
          * @throws HibernateException If the specified entity name cannot be resolved as an entity name
          */

         public NaturalIdLoadAccess byNaturalId(String entityName);

         /**
          * Create an {@link NaturalIdLoadAccess} instance to retrieve the specified entity by
          * its natural id.
          * 
          * @param entityClass The entity type to be retrieved
          *
          * @return load delegate for loading the specified entity type by natural id
          *
          * @throws HibernateException If the specified Class cannot be resolved as a mapped entity
          */

         public NaturalIdLoadAccess byNaturalId(Class entityClass);

         /**
          * Create an {@link SimpleNaturalIdLoadAccess} instance to retrieve the specified entity by
          * its natural id.
          *
          * @param entityName The entity name of the entity type to be retrieved
          *
          * @return load delegate for loading the specified entity type by natural id
          *
          * @throws HibernateException If the specified entityClass cannot be resolved as a mapped entity, or if the
          * entity does not define a natural-id or if its natural-id is made up of multiple attributes.
          */

         public SimpleNaturalIdLoadAccess bySimpleNaturalId(String entityName);

         /**
          * Create an {@link SimpleNaturalIdLoadAccess} instance to retrieve the specified entity by
          * its simple (single attribute) natural id.
          *
          * @param entityClass The entity type to be retrieved
          *
          * @return load delegate for loading the specified entity type by natural id
          *
          * @throws HibernateException If the specified entityClass cannot be resolved as a mapped entity, or if the
          * entity does not define a natural-id or if its natural-id is made up of multiple attributes.
          */

         public SimpleNaturalIdLoadAccess bySimpleNaturalId(Class entityClass);

         /**
          * Enable the named filter for this current session.
          *
          * @param filterName The name of the filter to be enabled.
          *
          * @return The Filter instance representing the enabled filter.
          */

         public Filter enableFilter(String filterName);

         /**
          * Retrieve a currently enabled filter by name.
          *
          * @param filterName The name of the filter to be retrieved.
          *
          * @return The Filter instance representing the enabled filter.
          */

         public Filter getEnabledFilter(String filterName);

         /**
          * Disable the named filter for the current session.
          *
          * @param filterName The name of the filter to be disabled.
          */

         public void disableFilter(String filterName);
         
         /**
          * Get the statistics for this session.
          *
          * @return The session statistics being collected for this session
          */

         public SessionStatistics getStatistics();

         /**
          * Is the specified entity or proxy read-only?
          *
          * To get the default read-only/modifiable setting used for
          * entities and proxies that are loaded into the session:
          * @see org.hibernate.Session#isDefaultReadOnly()
          *
          * @param entityOrProxy an entity or HibernateProxy
          * @return {@code true} if the entity or proxy is read-only, {@code false} if the entity or proxy is modifiable.
          */

         public boolean isReadOnly(Object entityOrProxy);

         /**
          * Set an unmodified persistent object to read-only mode, or a read-only
          * object to modifiable mode. In read-only mode, no snapshot is maintained,
          * the instance is never dirty checked, and changes are not persisted.
          *
          * If the entity or proxy already has the specified read-only/modifiable
          * setting, then this method does nothing.
          * 
          * To set the default read-only/modifiable setting used for
          * entities and proxies that are loaded into the session:
          * @see org.hibernate.Session#setDefaultReadOnly(boolean)
          *
          * To override this session's read-only/modifiable setting for entities
          * and proxies loaded by a Query:
          * @see Query#setReadOnly(boolean)
          * 
          * @param entityOrProxy an entity or HibernateProxy
          * @param readOnly {@code true} if the entity or proxy should be made read-only; {@code false} if the entity or
          * proxy should be made modifiable
          */

         public void setReadOnly(Object entityOrProxy, boolean readOnly);

         /**
          * Controller for allowing users to perform JDBC related work using the Connection managed by this Session.
          *
          * @param work The work to be performed.
          * @throws HibernateException Generally indicates wrapped {@link java.sql.SQLException}
          */

         public void doWork(Work work) throws HibernateException;

         /**
          * Controller for allowing users to perform JDBC related work using the Connection managed by this Session.  After
          * execution returns the result of the {@link ReturningWork#execute} call.
          *
          * @param work The work to be performed.
          * @param <T> The type of the result returned from the work
          *
          * @return the result from calling {@link ReturningWork#execute}.
          *
          * @throws HibernateException Generally indicates wrapped {@link java.sql.SQLException}
          */

         public <T> T doReturningWork(ReturningWork<T> work) throws HibernateException;

         /**
          * Disconnect the session from its underlying JDBC connection.  This is intended for use in cases where the
          * application has supplied the JDBC connection to the session and which require long-sessions (aka, conversations).
          * <p/>
          * It is considered an error to call this method on a session which was not opened by supplying the JDBC connection
          * and an exception will be thrown.
          * <p/>
          * For non-user-supplied scenarios, normal transaction management already handles disconnection and reconnection
          * automatically.
          *
          * @return the application-supplied connection or {@code null}
          *
          * @see #reconnect(Connection)
          */

         Connection disconnect();

         /**
          * Reconnect to the given JDBC connection.
          *
          * @param connection a JDBC connection
          * 
          * @see #disconnect()
          */

         void reconnect(Connection connection);

         /**
          * Is a particular fetch profile enabled on this session?
          *
          * @param name The name of the profile to be checked.
          * @return True if fetch profile is enabled; false if not.
          * @throws UnknownProfileException Indicates that the given name does not
          * match any known profile names
          *
          * @see org.hibernate.engine.profile.FetchProfile for discussion of this feature
          */

         public boolean isFetchProfileEnabled(String name) throws UnknownProfileException;

         /**
          * Enable a particular fetch profile on this session.  No-op if requested
          * profile is already enabled.
          *
          * @param name The name of the fetch profile to be enabled.
          * @throws UnknownProfileException Indicates that the given name does not
          * match any known profile names
          *
          * @see org.hibernate.engine.profile.FetchProfile for discussion of this feature
          */

         public void enableFetchProfile(String name) throws UnknownProfileException;

         /**
          * Disable a particular fetch profile on this session.  No-op if requested
          * profile is already disabled.
          *
          * @param name The name of the fetch profile to be disabled.
          * @throws UnknownProfileException Indicates that the given name does not
          * match any known profile names
          *
          * @see org.hibernate.engine.profile.FetchProfile for discussion of this feature
          */

         public void disableFetchProfile(String name) throws UnknownProfileException;

         /**
          * Convenience access to the {@link TypeHelper} associated with this session's {@link SessionFactory}.
          * <p/>
          * Equivalent to calling {@link #getSessionFactory()}.{@link SessionFactory#getTypeHelper getTypeHelper()}
          *
          * @return The {@link TypeHelper} associated with this session's {@link SessionFactory}
          */

         public TypeHelper getTypeHelper();

         /**
          * Retrieve this session's helper/delegate for creating LOB instances.
          *
          * @return This session's LOB helper
          */

         public LobHelper getLobHelper();

         /**
          * Contains locking details (LockMode, Timeout and Scope).
          */

         public interface LockRequest {
            /**
             * Constant usable as a time out value that indicates no wait semantics should be used in
             * attempting to acquire locks.
             */

            static final int PESSIMISTIC_NO_WAIT = 0;
            /**
             * Constant usable as a time out value that indicates that attempting to acquire locks should be allowed to
             * wait forever (apply no timeout).
             */

            static final int PESSIMISTIC_WAIT_FOREVER = -1;

            /**
             * Get the lock mode.
             *
             * @return the lock mode.
             */

            LockMode getLockMode();

            /**
             * Specify the LockMode to be used.  The default is LockMode.none.
             *
             * @param lockMode The lock mode to use for this request
             *
             * @return this LockRequest instance for operation chaining.
             */

            LockRequest setLockMode(LockMode lockMode);

            /**
             * Get the timeout setting.
             *
             * @return timeout in milliseconds, -1 for indefinite wait and 0 for no wait.
             */

            int getTimeOut();

            /**
             * Specify the pessimistic lock timeout (check if your dialect supports this option).
             * The default pessimistic lock behavior is to wait forever for the lock.
             *
             * @param timeout is time in milliseconds to wait for lock.  -1 means wait forever and 0 means no wait.
             *
             * @return this LockRequest instance for operation chaining.
             */

            LockRequest setTimeOut(int timeout);

            /**
             * Check if locking is cascaded to owned collections and relationships.
             *
             * @return true if locking will be extended to owned collections and relationships.
             */

            boolean getScope();

            /**
             * Specify if LockMode should be cascaded to owned collections and relationships.
             * The association must be mapped with {@code cascade="lock"} for scope=true to work.
             *
             * @param scope {@code true} to cascade locks; {@code false} to not.
             *
             * @return {@code this}, for method chaining
             */

            LockRequest setScope(boolean scope);

            /**
             * Perform the requested locking.
             *
             * @param entityName The name of the entity to lock
             * @param object The instance of the entity to lock
             */

            void lock(String entityName, Object object);

            /**
             * Perform the requested locking.
             *
             * @param object The instance of the entity to lock
             */

            void lock(Object object);
         }

         /**
          * Add one or more listeners to the Session
          *
          * @param listeners The listener(s) to add
          */

         public void addEventListeners(SessionEventListener... listeners);
      }
      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.csdn.net/Lxn2zh/article/details/137259643,作者:拾光师,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:linux下载软件包

      下一篇:JavaWeb之异步处理

      相关文章

      2025-05-19 09:05:01

      项目更新到公网服务器的操作步骤

      项目更新到公网服务器的操作步骤

      2025-05-19 09:05:01
      公网 , 数据库 , 文件 , 更新 , 服务器
      2025-05-19 09:04:53

      Django rest froamwork-ModelSerializer

      Django rest froamwork-ModelSerializer

      2025-05-19 09:04:53
      django , sqlite , 数据库
      2025-05-19 09:04:38

      mysql只有在任务处于完成状态才能运行

      mysql只有在任务处于完成状态才能运行

      2025-05-19 09:04:38
      MySQL , 任务 , 数据库 , 查询 , 状态
      2025-05-19 09:04:30

      设置28401事件后启动数据库时报错ORA-49100

      设置28401事件后启动数据库时报错ORA-49100

      2025-05-19 09:04:30
      ORA , 数据库 , 时报
      2025-05-14 10:03:13

      MySQL 索引优化以及慢查询优化

      MySQL 是一种广泛使用的关系型数据库管理系统,因其性能优异和使用便捷而备受欢迎。然而,随着数据量的增长和查询复杂度的增加,性能瓶颈也变得越来越明显。

      2025-05-14 10:03:13
      MySQL , 优化 , 使用 , 性能 , 数据库 , 查询 , 索引
      2025-05-14 10:03:13

      【Mybatis】-防止SQL注入

      【Mybatis】-防止SQL注入

      2025-05-14 10:03:13
      SQL , 执行 , 日志 , 注入 , 缓存 , 编译 , 语句
      2025-05-14 10:03:05

      Oracle数据库用户权限分析

      Oracle数据库用户权限分析

      2025-05-14 10:03:05
      Oracle , 分析 , 数据库 , 权限 , 用户
      2025-05-14 10:02:48

      互斥锁解决redis缓存击穿

      在高并发系统中,Redis 缓存是一种常见的性能优化方式。然而,缓存击穿问题也伴随着高并发访问而来。

      2025-05-14 10:02:48
      Redis , 互斥 , 数据库 , 线程 , 缓存 , 请求
      2025-05-14 10:02:48

      SQL Server 账号管理1

      SQL Server 账号管理主要包含登录名、用户、架构、角色等管理。通过对账号的管理可以有效的提高数据库系统的安全性,规范运维及使用。

      2025-05-14 10:02:48
      Server , SQL , 对象 , 数据库 , 权限 , 用户
      2025-05-14 10:02:48

      SQL Server 事务日志体系结构1--基本术语

      事务包括对数据库的一次更改或一系列更改。它有一个明确开始和明确结束。开始时使用BEGIN TRANSACTION语句,或者SQL Server会自动为您开始一个事务。

      2025-05-14 10:02:48
      Server , SQL , 事务 , 数据库 , 日志 , 磁盘
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5244066

      查看更多

      最新文章

      互斥锁解决redis缓存击穿

      2025-05-14 10:02:48

      laravel 源码分析之表单常用函数old

      2025-05-09 08:51:21

      springboot实战学习(1)(开发模式与环境)

      2025-05-09 08:50:35

      springboot酒店管理系统分前后端【源码+数据库】

      2025-05-08 09:03:21

      java Swing学生成绩管理系统【项目源码+数据库脚本】

      2025-05-08 09:03:21

      基础—SQL—DCL(数据控制语言)之权限控制

      2025-05-07 09:10:01

      查看更多

      热门文章

      Python数据库测试实战教程

      2023-06-07 07:31:52

      Hibernate注解开发关于Id的若干问题

      2022-12-29 09:29:46

      Python基础教程(第3版)中文版 第13章 数据库支持(笔记)

      2023-02-13 07:55:59

      2023爬虫学习笔记 -- Python链接Mysql数据库

      2023-05-04 09:43:57

      PHP基础知识

      2023-05-25 14:20:46

      C/C++ Qt 数据库与TreeView组件绑定

      2023-05-06 10:22:26

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      PouchDB:可随时同步的开源JavaScript数据库

      Java实现Cache Aside Pattern 例子

      Springboot项目的行为验证码AJ-Captcha(源码解读)

      vue中使用分页组件、将从数据库中查询出来的数据分页展示(前后端分离SpringBoot+Vue)

      基础—SQL—DCL(数据控制语言)小结

      <Java八股文面试>ArrayList源码 | Iterator源码 | LinkedList和ArrayList对比

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号