今天遇到一个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”字段进行查询的场景分析相关推荐

  1. hibernate中一对一关系映射

    这篇文章讲述的是hibernate中一对一关系映射,如有错误或者不当之处还望各位大神批评指正. 一对一映射(外键关联) 目标 假设一个人对应养一只狗,一只狗只能由一个人来养,完成一对一相关操作. 类编 ...

  2. java hibernate sqlserver自增_怎样在hibernate中实现oracle的主键自增策略?

    Oracle数据库索引和SQLServer的阐述 Oracle常见表结构 oracle数据库约束条件删除.取消.启用 在很多情况下,我们使用Hibernate在已经建立好数据库的基础上.在oracle ...

  3. Hibernate中的实体映射

    一.一对一映射  如人(Person)与身份证(IdCard) 的关系,即为一对一的关系,一个人只能有一张身份证,一张身份证只能属于某一个人,它们的关系图如下图所示: 在Person实体中添加一个属性 ...

  4. Hibernate中的一对一映射

    1.需求 用户和身份证是一一对应的关系. 有两种对应方式: 用户id作为身份证表的外键,身份证号作为主键: 用户id作为身份证表的主键: 2.实体Bean设计 User: public class U ...

  5. mysql hibernate mediumtext_mysql中的text,mediumtext,longtext在Hibernate中的类型映射

    (摘自http://congpeixue.iteye.com/blog/283402) 在Hibernate的配置中,我目前是采用Annotation的方式,不过原理应该都一样. 对于如下的属性: J ...

  6. hibernate 中id生成策略

    数据库的设计和操作中,我们通常会给表建立主键.  主键,可以分为自然主键和代理主键.  自然主键表示:采用具有业务逻辑含义的字段作为表的主键.比如在用户信息表中,采用用户的身份证号码作为主键.但是这样 ...

  7. Hibernate中的sql的所有的查询

    Hibernate 中HQL语句 本章介绍了Hibernate的几种主要检索方式:HQL检索方式.QBC检索方式.SQL检索方式.HQL是Hibernate Query Language的缩写,是官方 ...

  8. 处理表中id字段中,序号顺序不连贯

    处理表中id字段中,序号顺序不连续 上图为id字段,序号顺序不连贯.如何让表中id字段,顺序序号连贯起来,变成下图这种情况 第一步:把id的不设为主键 第二步:把id所有值为null 第三步:把id重 ...

  9. hibernate中的映射文件xxx.hbm.xml详解总结

    一.Hibernate映射文件的作用: Hibernate映射文件是Hibernate与数据库进行持久化的桥梁 二,Hibernate映射文件主要内容:     (1).映射内容的定义: Hibern ...

最新文章

  1. 基于Spring Boot和Spring Cloud实现微服务架构学习--转
  2. effective C++ 条款 5:了解c++默认编写并调用那些函数
  3. 《剑指Offer》23:链表中环的入口节点
  4. wsdl 架构验证警告:来自命名空间_金九银十,正在面试吗?面试官必问:JVM架构解读,查漏补缺...
  5. 【OpenGL】glFinish()和glFlush()函数详解
  6. java发送163邮件
  7. 光立方体c语言程序,444光立方程序怎么写 光立方原理图、源代码及制作教程 - 全文...
  8. 计算机三级数据库技术笔记
  9. AutoCAD Civil 3D-曲面-1、曲面创建
  10. python3教程合集
  11. ReadProcessMemory()
  12. 财物机器人英文ppt演讲课件_英语演讲练习PPT-机器人发展史(机械工程)ppt
  13. 帕斯卡三角形题解(Python代码实现)
  14. Angular14 Visual Studio Code作为Angular开发工具常用插件安装、json-server安装与使用、angular/cli安装失败问题、emmet安装...
  15. AllWinner T113 wifi tools交叉编译
  16. Java日期和时间JDK—API1.6.0(Date类、Calendar类)
  17. 昭衍生物获得新一轮融资,A轮投资方华盖资本已退出直接股东行列
  18. 常见标点符号的英文表达
  19. 微信小程序之阿里图标库icon的symbol使用方式
  20. 光伏中电能质量在线监测装置的应用

热门文章

  1. 这里有一份面筋请查收(二)
  2. OS- -文件系统(一)
  3. shell编程之简单四则运算及数组定义
  4. 什么是HLS(HTTP Live Streaming)?
  5. 【公开课预告】:六款开源LL-HLS/LL-DASH播放器评测
  6. 使用WebRTC开发Android Messenger:第2部分
  7. 【线上直播】ICASSP论文解读 | 智能语音交互技术
  8. LeetCode——排序
  9. MPEG4 (ISO/IEC 14496) 文档内容 简介
  10. STL:transform