Hibernate 如何实现查询表与字典表关联

问题描述

员工信息表(Employee)中存的“机构”,“部门”“职位”字段是存的代码。另外三张字典表存的是代码对应的名字。请问用Hibernate 如何关联这三张字典表,查询出机构,部门,职位对应的名字?并且不用再新建一个类,查询出来的值,直接赋到员工信息表对象中。Employee表结构:id,name,institution,department,position字典表:institution_dict表结构:id,namedepartment_dict表结构:id,nameposition_dict表结构:id,department_name,position_name

解决方案

1、写一个单独的hql 得到相应的数组数据 如[employe对象, 组织名,职位名]2、hibernate forumla 公式解决(你可google下)
解决方案二:
如果 Employee表 中 institution,department,position 存放的是外键的话存放是IDselect e.id,i.name,d.name,p.position_namefrom Employee e left join institution_dict i on e.institution=i.idleft join department_dict d on e.department on d.idleft join position_name p on e.position=p.id;用了hibernate 应该面向对象去设计类了貌似这样设计类:class Employeepublicint id;public String name;public Institution institution;public Position position;class Institutionpublicint id;public String name;class Departmentpublicint id;public String name;class Positionpublicint id;public Department department;public String name;那么这个hql可以这样写了select e.name,e.name,e.institution.name,e.position.department.name,e.position.name from Employee e
解决方案三:
写一个hql查询出联表的字段名称,并给关联表的字段名称取一个别名和员工类的非数据映射字段名称相同。String hql="select i.name as iname,d.name as dname,p.position_name as pname from Employee as e left join e.Institutio as i left jion e.Department as d left join e.Position as p where e.id =? ";Query query=super.getSession().createQuery(buffer.toString());query.setResultTransformer(new AliasToBeanResultTransformer(Employee.class));return query.uniqueResult();这样便可用一条sql一次把你要的数据查出来,封装成对应的字段。
解决方案四:
以上答案都是说用sql、hql解决,或者是forumla解决,当然这些都绝对正确。为什么不换个思路呢。一般这种字典表在项目中各个模块都可能用到,不可能每个模块都要这么做。业务的orm不用管这些字典数据,直接传到web前端。前端统一通过字典映射的自定义标签来转换。自定义标签通过缓存查找字典数据,然后输出到web前端。这样不管是表单输入、或者是查询统计,直接通过自定义标签来完成。这也是很多基础平台需要做的事情。如果是业务模块少,可以按照楼上几位的方案,直接在orm解决。
解决方案五:
使用hql的视图查询 如 select new com.msy.test.bean.User(t.name , r.name) from User t , Role r where ... 前提是你的User实体有类似 public User(String uname , String rname) 的构造方法 并且继承 java.io.Serializable接口
解决方案六:
我觉得你的描述好像是两个问题1 如何进行关联查询 select i.name,d.name,p.position_name from Employee as e left join e.Institutio as i left jion e.Department as d left join e.Position as p where e.id =?2 查询出来的值,直接赋到员工信息表对象中 当插入的时候,这个时候的值是从前台传递进来的,也就是Institutio的id、Department的id、Position的id

时间: 2024-09-17 04:23:32

Hibernate 如何实现查询表与字典表关联的相关文章

Hibernate对多表关联查询

由于公司项目的需要,我对Hibernate对多表关联查询研究了一下,现总结如下,供朋友参考. 一. Hibernate简介Hibernate是一个JDO工具.它的工作原理是通过文件(一般有两种:xml文件和properties文件)把值对象和数据库表之间建立起一个映射关系.这样,我们只需要通过操作这些值对象和Hibernate提供的一些基本类,就可以达到使用数据库的目的.例如,使用Hibernate的查询,可以直接返回包含某个值对象的列表(List),而不必向传统的JDBC访问方式一样把结果集的

hibernate的关联关系,是否数据库表中有外键没有关系?

问题描述 hibernate的关联关系,是否数据库表中有外键没有关系? hibernate的关联关系,是否数据库表中有外键没有关系?昨天使用了hibernate做了一个多对一的关系,然后在做数据库字段的时候,一开始并没有去建立外键约束,只是把关联字段的信息放了上去,然后CRUD操作都没问题,然后看了一篇帖子,上面看到数据库表中有外键约束,这时候才想起来这个事情,我加了外键以后也没什么问题,再去掉还是没有问题,那么这里是加还是不加外键呢?hibernate自己处理好了吗?有什么区别吗?以后是加好还

mysql 两张表关联查询问题

问题描述 mysql 两张表关联查询问题 现在有表A大概是百万级的数据,表B只有几千行,但是想在查询表A里剔除掉表B的数据,SELECT * FROM A WHERE NOT EXISTS (SELECT 1 FROM B WHERE B.id = A.id),这种写法效率很低,请问有没有其他的解决方法? 解决方案 这样写当然效率低,因为是笛卡尔积,要用join select a.*, b.* from a join b on a.id=b.id 解决方案二: 左外连left join 解决方案

hibernate-Hibernate 三张表关联 一对多对多 配置

问题描述 Hibernate 三张表关联 一对多对多 配置 当更新classA时,关联多方(classB)能自动更新,单与classB 关联的多方(Class C)却不能自动更新 classC: classB: classA: classA对应的A表主键是B表的外键,ClassB对应的B表主键是C标的外键.现在情况是saveorupdate()A表的时候,B表能自动更新. classA 对应A表 classB :b表 classC: c表 A表的主键Aid 是b表的外键, b表的bid是c表的外

关于表关联,在表中不显示,在程序中表现问题

问题描述 我们公司的表之间的关联关系不在建表时显示,在程序中建立model层时显示.有哪位指点一下怎么显示表之间的各种关系啊(在实体类中)???补充:不用hibernate等框架 问题补充:飞雪无情 写道 解决方案 不普遍,我们的关联最后在建表的时候还是体现在表里的..打开一些数据库管理工具就能看出来哪个表和哪个表关联,使用了什么字段关联!解决方案二:啊.还有这样的.那就看你们的设计文档吧,还有UML图啥的,那里有实体类与实体类之间的关系,还有一些你们定义或者用到的规范.或者你自己看程序源代码,

一口一口吃掉Hibernate(五)——一对多单向关联映射

      在上一篇博客<一口一口吃掉Hibernate(四)--多对一单向关联映射>中,介绍了多对一的关联映射,今天就反过来说一下一对多的单向关联映射.       可能有人会对这2篇博客的题目有点混淆不清,跟日常说的关系有点不同.我们日常说的比如父子关系,夫妻关系都是说的双向关系,而现在讨论的则是单向关系,所以也就有了多对一和一对多的说法.       二者的关系其实很简单,只是角度不同而已.比如说学生和班级的关系.如果从学生角度来看,是多对一的关系.而从班级角度来看,则是一对多的关系.说

asp.net 水晶报表-主从表关联问题

asp.net|水晶报表|问题 一.使用视图meeting将多表关联整合在一起 二.通过Sql语句筛选数据 三.建立和主从表的关联 四.注意在CrystalReport1表中插入子报表的时候,一定要将主从表的关联字段设置好,否则出乱子 主体代码如下: /// <summary>  /// Bind CrystalReport  /// </summary>  /// <param name="strS">sql</param>  priv

FleaPHP 开发指南 - 7. 数据表关联

开发指南|数据 数据表关联是指两个或者多个数据表的记录之间的逻辑关系. 例如: 每一个公民都有一个身份证号码 每一位作者都写了多本(0-n)书籍,而每一本书籍都有多个(1-n)作者 每一篇文章都有多个(0-n)评论 每一个评论都属于一篇文章 目前,FleaPHP 支持四种类型的数据表关联,分别是: HAS_ONE: 当前表的每一条记录都拥有最多一条(0–1)关联记录 HAS_MANY: 当前表的每一条记录都拥有多条(0-n)关联记录 MANY_TO_MANY: 当前表的每一条记录都和其他表的多条

ado.net数据操作全接触四(表关联,DataAdapter)

ado|数据 8.1创建一个(主/祥)表关联1: <%@ Import Namespace="System.Data" %>2: <%@ Import NameSpace="System.Data.SqlClient" %>3:4: <%5: Dim myConnection As SqlConnection6: Dim myDataAdapter As SqlDataAdapter7: Dim myDataSet As DataSet