首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

会话保存后的HQL,每次主键显示0

,可以理解为在使用Hibernate进行数据库操作时,通过会话(Session)保存对象后,再执行查询操作时,主键(ID)的值始终显示为0。

在Hibernate中,会话(Session)是与数据库交互的核心对象,用于执行各种数据库操作,包括保存、更新、删除和查询等。HQL(Hibernate Query Language)是Hibernate提供的一种面向对象的查询语言,类似于SQL,但更加灵活和面向对象。

当使用会话保存对象后,Hibernate会自动生成一个唯一的主键值并赋给对象的主键属性。然而,如果在保存对象后立即执行查询操作,可能会出现主键值显示为0的情况。这是因为Hibernate的会话缓存机制导致的。

会话缓存是Hibernate的一个重要特性,它可以提高数据库操作的性能。当保存对象后,Hibernate会将对象的状态缓存在会话中,以避免频繁访问数据库。但是,由于会话缓存的存在,查询操作可能会从缓存中获取对象的状态,而不是直接从数据库中查询。这就导致了主键值显示为0的情况。

解决这个问题的方法有两种:

  1. 刷新会话:在保存对象后,可以使用会话的flush()方法强制将缓存中的对象状态与数据库同步,这样在执行查询操作时就可以获取到正确的主键值。示例代码如下:
代码语言:txt
复制
session.save(obj); // 保存对象
session.flush(); // 刷新会话
  1. 新开会话:在保存对象后,可以关闭当前会话,再新开一个会话进行查询操作。这样可以避免会话缓存的影响,确保获取到正确的主键值。示例代码如下:
代码语言:txt
复制
session.save(obj); // 保存对象
session.close(); // 关闭当前会话
session = sessionFactory.openSession(); // 新开会话
session.get(Entity.class, id); // 执行查询操作

总结: 会话保存后的HQL,每次主键显示0是由于Hibernate的会话缓存机制导致的。可以通过刷新会话或新开会话的方式解决该问题。刷新会话可以使用flush()方法,新开会话可以关闭当前会话并新开一个会话进行查询操作。

腾讯云相关产品推荐:

  • 云数据库 TencentDB:提供高性能、高可用的云数据库服务,支持多种数据库引擎,适用于各类应用场景。详情请参考:云数据库 TencentDB
  • 云服务器 CVM:提供弹性、安全、稳定的云服务器实例,可满足不同规模和需求的应用场景。详情请参考:云服务器 CVM
  • 人工智能平台 AI Lab:提供丰富的人工智能服务和开发工具,帮助开发者快速构建和部署人工智能应用。详情请参考:人工智能平台 AI Lab
  • 云存储 COS:提供安全、可靠、低成本的云存储服务,适用于各类数据存储和文件管理需求。详情请参考:云存储 COS
  • 区块链服务 TBCAS:提供可信、高效、易用的区块链服务,支持企业级应用场景和开发需求。详情请参考:区块链服务 TBCAS

请注意,以上推荐的腾讯云产品仅供参考,具体选择应根据实际需求进行评估和决策。

相关搜索:Oracle Apex -保存更改后的“您的会话已结束”消息在每次提交后显示源代码的所有TODOexpress-session - req.session不显示已保存的会话加载页面后,在dropzone中显示保存的图像从python print中的broker api通过webscoket更新后,所有显示为零的数据值都包含0,0,0,0,0如何在非wordpress网站刷新页面后显示每次更改的博客帖子?如何在插入新行后立即将自动生成的主键值保存到第二列保存会话中的下拉列表中的数据,并显示在另一页Codeigniter中媒体网格仅加载预览中的图像,并在保存后不显示它们防止表单的值在onclick事件后被重置,并将用户的输入保存在会话存储中Firestore中的颤振数据在保存到firestore后显示在ui中如何从自定义单元格保存UILabel,以便每次打开应用程序时都显示最新的更改?yarn在每次输入更改后开始更新我的开发服务器,而不是只有在我保存之后才开始更新Django Model Admin:如何自动分配和隐藏当前用户的created_by字段,并在保存后显示?在保存更改-react时,相同的数据在添加到列表后显示两次我创建了一个具有返回值的SP,但在执行后它显示0作为返回值将翻译后的值显示给用户,但在数据库中保存其他内容| Angularjs | Angular-Translate当我通过一个列表而不是一个浮点数或整数时,为什么我的类实例要在每次迭代后保存最终的值?在c++中显示小数点后的五位数,但如果小数点后有0位,则不打印它们
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

系统学习javaweb-10-Hibernate配置与api操作

CRUDapi操作 【package2】:com.csxiaoyao.query 四种查询:主键查询、HQL(详解多种情况)、Criteria、本地SQL 【package3】:com.csxiaoyao.mapping...(obj)) 没有设置主键,执行保存;有设置主键,执行更新操作;如果设置主键不存在报错 session.delete(id); 删除一个对象(EmployeeDaoImpl.delete(id..., id); 主键查询 (支持懒加载) 【HQL查询】 HQL、SQL查询区别: SQL: (结构化查询语句)查询是表以及字段;不区分大小写 (EmployeeDaoImpl.getAll...在真正使用数据时候才向数据库发送查询sql;调用集合size()/isEmpty()方法,只是统计,不真正查询数据 【解决session关闭使用懒加载数据报错】 // 方式1: 先使用一下数据...#hibernate.c3p0.idle_test_period 3000 空闲测试时间 #hibernate.c3p0.acquire_increment 2 连接不够用时候, 每次增加连接数

94520
  • day29_Hibernate学习笔记_01

    Session api:   session.save(Object); 保存   session.update(Object); 更新   session.delete(Object); 删除   ...小问题汇总并解答: 1、load方法,会返回一个代理对象,在获得其内容(属性)时,会查询数据库,是每次访问属性都会查询数据库吗? 答:不是每次都查。...setMaxResults(int); 分页,每页显示个数pageSize。 示例代码如下图所示: ?...基本类型无法表达null、数字类型默认值为0。 包装类默认值是null。当对于默认值有业务意义时候需要使用包装类。...默认值:255             precision   小数点位数             scale       总位数             not-null    指定属性约束是否使用

    1.1K20

    Hibternate框架笔记

    org.hibernate.SessionFactory 创建,将自动使用这个名字绑定到 JNDI 中。...2、increment 由Hibernate从数据库中取出主键最大值(每个session只取1次),以该值为基础,每次增量为1,在内存中生成主键,不依赖于底层数据库,因此可以跨数据库。...3、hilo hilo(高低位方式high low)是hibernate中最常用一种生成方式,需要一张额外保存hi值。保存hi值表至少有一条记录(只与第一条记录有关),否则会出现错误。...这要根据具体情况而定,如果系统一般不重启,而且需要用此表建立大量主键,可以吧max_lo配置大一点,这样可以减少读取数据表次数,提高效率;反之,如果服务器经常重启,可以吧max_lo配置小一点,可以避免每次重启主键之间间隔太大...每次需要主键值时,查询名为"hibernate_table"表,查找主键列"gen_pk"值为"2"记录,得到这条记录"gen_val"值,根据这个值,和allocationSize值生成主键值。

    1.8K60

    Hibernate入门这一篇就够了

    (obj); 【保存或者更新方法】 **没有设置主键,执行保存; ** **有设置主键,执行更新操作; ** 如果设置主键不存在报错!...这里写图片描述 ---- HQL查询 HQL:hibernate query language 即hibernate提供面向对象查询语言 查询是对象以及对象属性【它查询是对象以及属性,因此是区分大小写...; //这里?号是从0开始,并不像JDBC从1开始!...这里写图片描述 ---- QBC查询 QBC查询: query by criteria 完全面向对象查询 从上面的HQL查询,我们就可以发现:HQL查询是需要SQL基础,因为还是要写少部分SQL...这里写图片描述 create-drop 每次在创建sessionFactory时候执行创建表。当调用sesisonFactoryclose方法时候,删除表!

    1.6K40

    【框架】构架知识点常见操作

    Hibernate主键ID生成方式 数据库中表有主键主键唯一性决定了数据库表中记录唯一。缓存在Session中数据即实例都有一个唯一ID,ID映射了数据库中主键。...此方式实现机制为在当前应用实例中维持一个变量,以保存着当前最大值,之后每次需要生成主键时候将此值加1作为主键。...这种方式可能产生问题是:如果当前有多个实例访问同一个数据库,那么由于各个实例各自维护主键状态,不同实例可能生成同样主键,从而造成主键重复异常。...但是不要被语法结构上相似所迷惑,HQL(Hibernate query lauguage) 被设计为完全面向对象查询。...HQL对关键字大写小并不区分,但是对查询对象就要区分大小写,因为它是面向对象查询,所以查询是一个对象,而不是数据库表,在sql中如果要加条件的话就是列,而在HQL里面条件就是对象属性,而且还要给对象起别名

    68040

    Hibernate四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加

    32 SessionFactory sf=config.buildSessionFactory(); 33 //创建session(代表一个会话,与数据库连接会话)...:        session.saveOrUpdate(user);       这个实现是如果没有实体类编号就执行保存操作,如果有实体类编号就执行修改操作;         设计Hibernate...查询,特别注意是查询语句必须是实体类方法名,不能是表名称,必须和sql语句查询区别:     HQL查询和sql查询区别:       (1):sql查询是表以及字段,不区分大小写,也叫做结构化查询语句...;       (2):HQL查询是Hibernate提供面向对象查询语句,查询是对象以及对象属性,区分大小写。...,或者不想使用HQL或者criteria查询,可以使用本地sql查询,缺点,不能跨越数据库,一般不适用,除非遇到复杂sql语句才使用:     核心代码:       //sql语句

    5.1K110

    那些年,我们见过 Java 服务端乱象

    3.1.引起以下主要问题 业务层和持久层混杂在一起,不符合SpringMVC服务端三层架构规范; 在业务逻辑中组装语句、主键等,增加了业务逻辑复杂度; 在业务逻辑中直接使用第三方中间件,不便于第三方持久化中间件替换...现象描述: /** 用户服务类 */ @Service public class UserService { /** 会话工厂 */ @Autowired private SessionFactory...userVO); return userVO; } } 建议方案: /** 用户DAO类 */ @Repository public class UserDAO { /** 会话工厂...; 只需要进行一个简单查询,也需要导入一整套复杂代码; 进行复杂查询时,拼装条件代码复杂且不直观,不如在XML中直接编写SQL语句; 变更表格需要重新生成代码并进行覆盖,可能会不小心删除自定义函数。.../** Redis模板 */ @Autowired private RedisTemplate redisTemplate; /** 主键模式

    34620

    Spring全家桶之SpringData——Spring 整合Hibernate与Hibernate Jpa

    编写测试代码 .加入相关注解 Hibernate查询(非主键列)-HQL查询 介绍 接口类 接口实现类 测试类 Hibernate查询-SQL查询 介绍 接口类 接口实现类 测试类 Hibernate...-- 显示当前执行sql语句 --> true <!...(非主键列)-HQL查询 介绍 HQL:Hibernate Query Language HQL 语法:就是将原来sql 语句中表与字段名称换成对象与属性名称 接口类 List<Users...当事务提交或者回滚session 自动失效 openSession:每次都会打开一个新session.加入每次使用多次。则获得是不同session 对象。...当事务提交或者回滚session 自动失效 * 2. openSession:每次都会打开一个新session.加入每次使用多次。则获得是不同session 对象。

    2.8K20

    一起来学SpringBoot | 第六篇:整合SpringDataJpa

    JPA JPA是 JavaPersistenceAPI简称,中文名Java持久层API,是官方(Sun)在JDK5.0提出Java持久化规范。...优点 丰富API,简单操作无需编写额外代码 丰富SQL日志输出 缺点 学习成本较大,需要学习HQL 配置复杂,虽然 SpringBoot简化大量配置,关系映射多表查询配置依旧不容易 性能较差,...@GeneratedValue(strategy=GenerationType.IDENTITY)自增策略,不需要映射字段可以通过 @Transient注解排除掉 常见几种自增策略 TABLE: 使用一个特定数据库表格来保存主键...只需要这样简单配置,该 UserRepository就拥常用 CRUD功能, JpaRepository本身就包含了常用功能,剩下查询我们按照规范写接口即可, JPA支持@Query注解写HQL,...(new User(user.getId(), "修改ui", "修改p1")); log.info("[修改成功] - [{}]", edit); userRepository.deleteById

    1.6K20

    Hibernate【查询详解、连接池、逆向工程】

    前言 在Hibernate第二篇中只是简单地说了Hibernate几种查询方式….到目前为止,我们都是使用一些简单主键查询阿…使用HQL查询所有的数据….本博文主要讲解Hibernate查询操作...,连接池,逆向工程知识点… get/load主键查询 由于主键查询这个方法用得比较多,于是Hibernate专门为我们封装了起来… get()立即查询 ?...提供了对象导航查询:我们可以使用主键查询完之后,得到对象,直接使用对象得到集合…就可以得到对应数据了。...; //HQL是从0开始 query.setParameter(0, "大猴子"); System.out.println(query.list())...连接不够用时候, 每次增加连接数 #hibernate.c3p0.validate false ?

    1.3K50

    那些年,我们见过 Java 服务端乱象

    3.1.引起以下主要问题 业务层和持久层混杂在一起,不符合SpringMVC服务端三层架构规范; 在业务逻辑中组装语句、主键等,增加了业务逻辑复杂度; 在业务逻辑中直接使用第三方中间件,不便于第三方持久化中间件替换...现象描述: /** 用户服务类 */ @Service public class UserService { /** 会话工厂 */ @Autowired private SessionFactory...userVO); return userVO; } } 建议方案: /** 用户DAO类 */ @Repository public class UserDAO { /** 会话工厂...; 只需要进行一个简单查询,也需要导入一整套复杂代码; 进行复杂查询时,拼装条件代码复杂且不直观,不如在XML中直接编写SQL语句; 变更表格需要重新生成代码并进行覆盖,可能会不小心删除自定义函数。.../** Redis模板 */ @Autowired private RedisTemplate redisTemplate; /** 主键模式

    41820

    那些年,我们见过 Java 服务端乱象

    3.1.引起以下主要问题 业务层和持久层混杂在一起,不符合SpringMVC服务端三层架构规范; 在业务逻辑中组装语句、主键等,增加了业务逻辑复杂度; 在业务逻辑中直接使用第三方中间件,不便于第三方持久化中间件替换...现象描述: /** 用户服务类 */ @Service public class UserService { /** 会话工厂 */ @Autowired private SessionFactory...userVO); return userVO; } } 建议方案: /** 用户DAO类 */ @Repository public class UserDAO { /** 会话工厂...; 只需要进行一个简单查询,也需要导入一整套复杂代码; 进行复杂查询时,拼装条件代码复杂且不直观,不如在XML中直接编写SQL语句; 变更表格需要重新生成代码并进行覆盖,可能会不小心删除自定义函数。.../** Redis模板 */ @Autowired private RedisTemplate redisTemplate; /** 主键模式

    38020

    那些年,我们见过 Java 服务端乱象

    3.1.引起以下主要问题 业务层和持久层混杂在一起,不符合SpringMVC服务端三层架构规范; 在业务逻辑中组装语句、主键等,增加了业务逻辑复杂度; 在业务逻辑中直接使用第三方中间件,不便于第三方持久化中间件替换...现象描述: /** 用户服务类 */ @Service public class UserService { /** 会话工厂 */ @Autowired private SessionFactory...userVO); return userVO; } } 建议方案: /** 用户DAO类 */ @Repository public class UserDAO { /** 会话工厂...; 只需要进行一个简单查询,也需要导入一整套复杂代码; 进行复杂查询时,拼装条件代码复杂且不直观,不如在XML中直接编写SQL语句; 变更表格需要重新生成代码并进行覆盖,可能会不小心删除自定义函数。.../** Redis模板 */ @Autowired private RedisTemplate redisTemplate; /** 主键模式

    80810

    那些年,我们见过 Java 服务端乱象

    3.1.引起以下主要问题 业务层和持久层混杂在一起,不符合SpringMVC服务端三层架构规范; 在业务逻辑中组装语句、主键等,增加了业务逻辑复杂度; 在业务逻辑中直接使用第三方中间件,不便于第三方持久化中间件替换...现象描述: /** 用户服务类 */ @Service public class UserService { /** 会话工厂 */ @Autowired private SessionFactory...userVO); return userVO; } } 建议方案: /** 用户DAO类 */ @Repository public class UserDAO { /** 会话工厂...; 只需要进行一个简单查询,也需要导入一整套复杂代码; 进行复杂查询时,拼装条件代码复杂且不直观,不如在XML中直接编写SQL语句; 变更表格需要重新生成代码并进行覆盖,可能会不小心删除自定义函数。.../** Redis模板 */ @Autowired private RedisTemplate redisTemplate; /** 主键模式

    54420
    领券