例如对于TUser类
  1.实体查询
  String hql = " from TUser";
  执行这条语句会返回TUser以及TUser子类的纪录。
  注: 如果 TUser 类具有外键, 查询会报错!
  解决方法: select 别名.属性 from 类 as 别名. 没有别名.属性仍然报错!  
  hql = "from java.lang.Object"
  会返回数据库中所有库表的纪录。
  where 语句
  hql = "from TUser as user where user.name=’yyy’";
  其中,as可以省略也一样
  hql = "from TUser user where user.name=’yyy’";
  where子句中,我们可以通过比较运算符设定条件,如:
  =, <>, >, <, >=, <=, between, not between, in, not in, is, like等。
  2.属性查询
  List list = session.createQuery("select user.name, user.age from TUser as user").list();
  还可以在HQL中动态构造对象实例的方法,将数据封装。
  List list = session.createQuery("select new TUser(user.name, user.age) from TUser as user").list();
  Iterator it = list.iterator();
  while(it.hasNext() ) {
  TUser user = (TUser)it.next();
  System.out.println(user.getName());
  }
  但是要注意这里的TUser对象只是对name和age属性的封装,其他状态均未赋值,所以不能用它来进行更新操作。
  也可以在HQL的Select子句中使用统计函数
  "select count(*) ,min(user.age) from TUser as user"
  也可以使用distinct关键字来删除重复纪录。
  select distinct user.name from TUser as user;
  3.实体的更新与删除
  hibernate 2中需要先查询出实体,设置属性后再保存。
  hibernate 3中,提供了更灵活的方式(bulk delete/update)
  更新:
  Query query = session.createQuery("update TUser set age=18 where id=1");
  query.executeUpdate();
  删除:
  session.createQuery("delete from TUser where age>=18");
  query.executeUpdate();
  4.分组与排序
  Order by子句:
  from TUser user order by user.name, user.age desc
  Group by子句和Having子句
  "select count(user), user.age from TUser user group by user.age having count(user)>10"
  5.参数邦定
  通过顺序占位符?来填充参数:
  1)hibernate 2 中通过session.find方法来填充
  session.find("from TUser user where user.name=?", "Erica", Hibernate.STRING);
  多个参数的情况:
  Object[] args = new Object[] {"Erica", new Integer(20)};
  Type[] types = new Type{Hibernate.STRING, Hibernate.INTEGER};
  session.find("from TUser user where user.name=? and user.age=?", args, types);
  2)通过Query接口进 进行参数填充:
  Query query = session.createQuery("from TUser user where user.name=? and user.age>?");
  query.setString(0,"Erica");
  query.setInteger(1, 20);
  通过引用占位符来填充参数:
  String hql = "from TUser where name=:name";
  Query query = session.createQuery(hql);
  query.setParameter("name","Erica");
  甚至可以将查询条件封装为一个JavaBean
  class UserQuery {
  private String name;
  private Integer age;
  //getter and setter
  }
  String hql = "from TUser where name=:name and age=:age";
  Query query = session.createQuery(hql);
  UserQuery uq = new UserQuery();
  uq.setName("Erica");
  uq.setAge(new Integer(20));
  query.setProperties(uq); //会调用里面的getter?
  query.iterate();
  6.联合查询
  也可以使用 inner join,left outer join, right out join, full join
  排列组合:form TUser, TAddress

转自:http://www.51test.net/show/469304.html

转载于:https://www.cnblogs.com/wangzhanjianshe/archive/2009/01/09/2327090.html

JAVA基础:Hibernate外键关联与HQL语法相关推荐

  1. java如何写外键关联_JAVA基础:Hibernate外键关联与HQL语法

    例如对于TUser类 1.实体查询 String hql = " from TUser"; 执行这条语句会返回TUser以及TUser子类的纪录. 注: 如果 TUser 类具有外 ...

  2. Java hibernate假外键_JAVA基础:Hibernate外键关联与HQL语法

    例如对于TUser类 1.实体查询 String hql = " from TUser"; 执行这条语句会返回TUser以及TUser子类的纪录. 注: 如果 TUser 类具有外 ...

  3. Java hibernate假外键_浅谈hibernate急迫加载问题(多重外键关联)

    数据库结构如下 strategy中有外键member_id(关联member表)外键strategy_category(关联category表)而member表中有外键position_id(关联po ...

  4. hibernate一对一主键唯一外键关联(一)

    1.新建工程项目hibernate_one2one_ufk_1,添加hibernate所需Jar包和数据库驱动Jar包. 2.编写工具类HibernateUtils.java和ExportDB.jav ...

  5. hibernate一对一主键唯一外键关联(二)

    1.新建工程项目hibernate_one2one_ufk_2,添加hibernate所需的Jar包和数据库驱动的Jar包. 2.编写工具类HibernatUtils.java和ExportDB.ja ...

  6. hibernate one2one 唯一外键关联(双向关联)

    hibernate的一对一唯一外键关联映射(双向关联 Person <------->IdCard) 一对一唯一外键关联采用<one - to -one>标签映射,必须指定标签 ...

  7. Hibernate,关系映射的多对一单向关联、多对一双向关联、一对一主键关联、一对一外键关联、多对多关系关联...

    2018-11-10  22:27:02开始写 下图内容ORM.Hibernate介绍.hibername.cfg.xml结构: 下图内容hibernate映射文件结构介绍 下图内容hibernate ...

  8. JPA关系映射系列一:one-to-one外键关联

    2019独角兽企业重金招聘Python工程师标准>>> SpringDataJPA是Spring Data的一个子项目,通过提供基于JPA的Repository极大的减少了JPA作为 ...

  9. mysql 删除表数据_主外键关联表的数据删除策略

    说个题外话,我从来没想过会被拼多多这款软件所魔怔,他的这种社交营销的能力,实在是太强了,在怂恿之下,开始给儿子拼个这个, 各位有空帮砍下,https://w.url.cn/s/AzlPAB9,或者扫下 ...

最新文章

  1. python 编程入门-Python编程入门电子书教程,看这几个就够了
  2. DPDK vhost库(十一)
  3. 打开CEPH内核DOUT日志输出
  4. HTML5制作斑马线表格,JavaScript实现的斑马线表格效果【隔行变色】
  5. JavaScript中map函数和filter的简单举例
  6. ASP.NET MVC4 微信公众号开发之网页授权(一):搭建基础环境
  7. [Python学习] 专题二.条件语句和循环语句的基础知识
  8. html5点击按钮出现弹窗 怎么实现_HTML5游戏开发过程中的二三事
  9. Cocoa依赖包管理工具
  10. JavaScript学习笔记(二)--流程控制语句
  11. 如何将多个word文档的内容合并到一个文档 多html转word
  12. C#:WebBrowser中伪造referer,为何对流量统计器无效?
  13. Axure RP 9安装与使用
  14. 【linux内核分析与应用-陈莉君】动手实践--内核多任务并发实例
  15. 【编译原理】 根据语法树 写出对应的短语 直接短语 句柄 构造产生式
  16. 一款Img图床模板码 扩展性超强纯Html+响应式
  17. XILINX DDR3 VIVADO(二)写模块
  18. 推荐电影:朴赞郁的《老男孩》
  19. 中基鸿业什么是净值型理财产品
  20. HTML5讲解与演示转载整理

热门文章

  1. 量化金融模型的基本Roadmap
  2. 如果不知道做什么,那应该做什么呢?
  3. 我认为视频内容不会取代文字内容的原因
  4. Dictionary,hashtable, stl:map有什么异同?
  5. RAS RC4 AES 加密 MD5
  6. 1. Linux内核的配置与裁减:
  7. Linux 系统内存分析
  8. 一、new与alloc init的区别
  9. 关于把世界坐标投射到屏幕上转换为屏幕2D坐标
  10. Sublime3安装过程及常用插件安装及常用快捷键