Hibernate 中Hql 查询中间表的用法
案例简述:
项目中存在User 用户表 和 Role 角色表
它们之间是多对多的关系
在User类定义中 使用hibernate注解
//角色列表
@ManyToMany(targetEntity = Role.class,fetch = FetchType.EAGER)
@JoinTable(name="sys_user_role" ,
joinColumns = {@JoinColumn(name = "user_id",referencedColumnName="id")},
inverseJoinColumns = {@JoinColumn(name="role_id",referencedColumnName="id")})
@Expose
private Set<Role> roles = new HashSet<Role>();
在Role类中定义中如下
//角色对应的用户 n:n
@ManyToMany(targetEntity = User.class,fetch = FetchType.EAGER, mappedBy = "roles")
private Set<User> users = new HashSet<User>();
数据库会自动生成sys_user_role表,但是这个是没有实体类的
所以在HQL面向对象的查询中是不能直接查找中间表的
正确的查询关联方法:
String sql1 = "SELECT r.code FROM Role r left join r.users u where u.id = ?";
Query query1 = sessionFactory.getCurrentSession().createQuery(sql1);
query1.setInteger(0,UserId);
这个通过这样
SELECT r.code FROM Role r left join r.users u where u.id = ?
Role 实体与user实体间的关联就可以通过user的信息查到role表中的信息。
Hibernate 中Hql 查询中间表的用法的更多相关文章
- hibernate 中HQL查询
由于比较简单,在此处只写一些HQL语言. 表关系,多对一. CREATE TABLE `user` ( `id` ) NOT NULL AUTO_INCREMENT, `uname` varchar( ...
- JavaWeb_(Hibernate框架)Hibernate中数据查询语句SQL基本用法
本文展示三种在Hibernate中使用SQL语句进行数据查询基本用法 1.基本查询 2.条件查询 3.分页查询 package com.Gary.dao; import java.util.List; ...
- JavaWeb_(Hibernate框架)Hibernate中数据查询语句Criteria基本用法
Criteria进行数据查询与HQL和SQL的区别是Criteria完全是面向对象的方式在进行数据查询,将不再看到有sql语句的痕迹,使用Criteria 查询数据包括以下步骤: 1. 通过sessi ...
- Hibernate中Hql查询
这篇随笔将会记录hql的常用的查询语句,为日后查看提供便利. 在这里通过定义了三个类,Special.Classroom.Student来做测试,Special与Classroom是一对多,Class ...
- Hibernate五 HQL查询
HQL查询一 介绍1.HQL:Hibernate Query Language,是一种完全面向对象的查询语言.使用Hibernate有多重查询方式可供选择:hibernate的HQL查询,也可以使用条 ...
- hibernate的hql查询
1.概念介绍 1.Query是Hibernate的查询接口,用于从数据存储源查询对象及控制执行查询的过程,Query包装了一个HQL查询语句. 2.HQL是Hibernate Query Langua ...
- Hibernate之HQL查询
一.Hibernate 提供了以下几种检索对象的方式: 导航对象图检索方式: 根据已经加载的对象导航到其他对象 OID 检索方式: 按照对象的 OID 来检索对象 HQL 检索方式:使用面向对象的 H ...
- Hibernate原生SQL查询多表关联,SQL语句要注意的问题
Hibernate原生SQL查询多表关联,SQL语句要注意的问题 @for&ever 2009-9-4 系统环境: MySQL5.1 Hibernate3.3 有如下的假定: 实体类 Ques ...
- mysql中模糊查询的四种用法介绍
下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] ...
随机推荐
- 10.Java 加解密技术系列之 DH
Java 加解密技术系列之 DH 序 概念 原理 代码实现 结果 结束语 序 上一篇文章中简单的介绍了一种非对称加密算法 — — RSA,今天这篇文章,继续介绍另一种非对称加密算法 — — DH.当然 ...
- [原创]CentOS下Mysql的日志回滚
一. 环境: a) Centos-6.5-x64位操作系统. b) 安装mysql.命令:yum install mysql* 二. 配置 a) ...
- SVN版本控制系统搭建(+结合http服务)
.zise { background: #CCCCFF; color: white; text-align: center } .fense { color: #FFCCCC; text-align: ...
- R与并行计算(转)
文章摘要 本文首先介绍了并行计算的基本概念,然后简要阐述了R和并行计算的关系.之后作者从R用户的使用角度讨论了隐式和显示两种并行计算模式,并给出了相应的案例.隐式并行计算模式不仅提供了简单清晰的使用方 ...
- BAYESIAN STATISTICS AND CLINICAL TRIAL CONCLUSIONS: WHY THE OPTIMSE STUDY SHOULD BE CONSIDERED POSITIVE(转)
Statistical approaches to randomised controlled trial analysis The statistical approach used in the ...
- makefile介绍1.0
1.gcc参数 -o指定生成文件名 -c只编译不链接 2.makefile标准格式 CC=gcc #编译器变量,#代表注释 SRCS=main.cpp\#源文件变量 a.cpp\ b.cpp\ c.c ...
- centos 下 安装mysql
今天在centos上安装了一下 mysql 出现了一点问题 记录一下解决方案: 1:解决yum install mysql-server没有可用包的问题 sudo yum install mysql- ...
- WireShark网络分析就这么简单 读后感
京东618活动,满200减100,果断入手了这本经典的 WireShark教程
- 什么是 html 标签,html 实体
为什么需要转换 更简了,因为有时候我们需要在浏览器页面中显示 html 标签,然而直接输出<script>alert(1)</script>,在浏览页面时将会被当作 html ...
- 学习web前端怎样入门?初学者赶紧看过来!
web前端怎么样才能入门,首先我们要从什么是初级web前端工程师说起: 按照我的想法,我把前端工程师分为了入门.初级.中级.高级这四个级别, 入门级别指的是了解什么是前端(前端到底是什么其实很多人还是 ...