Hibernate中使用未映射为主键的“id”字段进行查询的场景分析
今天遇到一个hibernate的问题,有一个实体的主键字段叫userId,数据库里的字段名称是user_id。
然后在某个查询语句里有这样一段代码:
Criterion criterion = Restrictions.eq("id",userId);
User user=userDao.findUnique(criterion);
当时看到这段代码的感觉是应该会报错吧,因为这个实体并没有id这个字段,然而事实是不仅可以运行,结果还是正确的。
搜索了下网络,发现有网友遇到类似的问题,但是没有找到问题的原因。原帖如下:
跟踪了一下hibernate的源代码,发现在hibernate启动生成映射关系的时候,会先初始化普通字段的映射关系,再初始化主键字段的映射关系,如下图所示:
而这种主键字段的初始化,也就是initIdentifierPropertyPaths(mapping)这个方法,不仅会生成userId->user_id的映射关系,还会生成一条id->user_id到映射关系。
至此,问题的原因已经明朗了,我遇到的问题是因为hibernate自动生成了id的映射,所以可以访问到id属性。而网友的问题则是,hibernate第二步自动生成的id映射关系覆盖了第一步普通属性里id的映射关系。
Hibernate中使用未映射为主键的“id”字段进行查询的场景分析相关推荐
- hibernate中一对一关系映射
这篇文章讲述的是hibernate中一对一关系映射,如有错误或者不当之处还望各位大神批评指正. 一对一映射(外键关联) 目标 假设一个人对应养一只狗,一只狗只能由一个人来养,完成一对一相关操作. 类编 ...
- java hibernate sqlserver自增_怎样在hibernate中实现oracle的主键自增策略?
Oracle数据库索引和SQLServer的阐述 Oracle常见表结构 oracle数据库约束条件删除.取消.启用 在很多情况下,我们使用Hibernate在已经建立好数据库的基础上.在oracle ...
- Hibernate中的实体映射
一.一对一映射 如人(Person)与身份证(IdCard) 的关系,即为一对一的关系,一个人只能有一张身份证,一张身份证只能属于某一个人,它们的关系图如下图所示: 在Person实体中添加一个属性 ...
- Hibernate中的一对一映射
1.需求 用户和身份证是一一对应的关系. 有两种对应方式: 用户id作为身份证表的外键,身份证号作为主键: 用户id作为身份证表的主键: 2.实体Bean设计 User: public class U ...
- mysql hibernate mediumtext_mysql中的text,mediumtext,longtext在Hibernate中的类型映射
(摘自http://congpeixue.iteye.com/blog/283402) 在Hibernate的配置中,我目前是采用Annotation的方式,不过原理应该都一样. 对于如下的属性: J ...
- hibernate 中id生成策略
数据库的设计和操作中,我们通常会给表建立主键. 主键,可以分为自然主键和代理主键. 自然主键表示:采用具有业务逻辑含义的字段作为表的主键.比如在用户信息表中,采用用户的身份证号码作为主键.但是这样 ...
- Hibernate中的sql的所有的查询
Hibernate 中HQL语句 本章介绍了Hibernate的几种主要检索方式:HQL检索方式.QBC检索方式.SQL检索方式.HQL是Hibernate Query Language的缩写,是官方 ...
- 处理表中id字段中,序号顺序不连贯
处理表中id字段中,序号顺序不连续 上图为id字段,序号顺序不连贯.如何让表中id字段,顺序序号连贯起来,变成下图这种情况 第一步:把id的不设为主键 第二步:把id所有值为null 第三步:把id重 ...
- hibernate中的映射文件xxx.hbm.xml详解总结
一.Hibernate映射文件的作用: Hibernate映射文件是Hibernate与数据库进行持久化的桥梁 二,Hibernate映射文件主要内容: (1).映射内容的定义: Hibern ...
最新文章
- 基于Spring Boot和Spring Cloud实现微服务架构学习--转
- effective C++ 条款 5:了解c++默认编写并调用那些函数
- 《剑指Offer》23:链表中环的入口节点
- wsdl 架构验证警告:来自命名空间_金九银十,正在面试吗?面试官必问:JVM架构解读,查漏补缺...
- 【OpenGL】glFinish()和glFlush()函数详解
- java发送163邮件
- 光立方体c语言程序,444光立方程序怎么写 光立方原理图、源代码及制作教程 - 全文...
- 计算机三级数据库技术笔记
- AutoCAD Civil 3D-曲面-1、曲面创建
- python3教程合集
- ReadProcessMemory()
- 财物机器人英文ppt演讲课件_英语演讲练习PPT-机器人发展史(机械工程)ppt
- 帕斯卡三角形题解(Python代码实现)
- Angular14 Visual Studio Code作为Angular开发工具常用插件安装、json-server安装与使用、angular/cli安装失败问题、emmet安装...
- AllWinner T113 wifi tools交叉编译
- Java日期和时间JDK—API1.6.0(Date类、Calendar类)
- 昭衍生物获得新一轮融资,A轮投资方华盖资本已退出直接股东行列
- 常见标点符号的英文表达
- 微信小程序之阿里图标库icon的symbol使用方式
- 光伏中电能质量在线监测装置的应用