Hibernate自定义字段查询
关于Hibernate自定义字段查询的方法,网上有很多,我这里就不详细写了,只把几个查询方法的注意事项说明一下。
废话少说, 进入正题:
假设有2个实体对象,Institution和User,结构与配置如下:
@Entity(value = "Institution")
@Table(name = ”TB_INSTITUTION")
public class Institution {
@Id
private int id;
private String institutionName;
}
@Entity(value="User")
@Table(name="TB_USER")
public class User{
@Id
private int id;
private String username;
@ManyToOne
@JoinColumn(name="institutionId")
private Institution institution;
public User(){
}
public User(int id,String username,String institutionName){
this.id = id;
this.username = username;
this.institution = new Institution();
this.institution.setInstitutionName(institutionName);
}
}
此处省略了一些配置和set,get方法。
下面查询User对象
第一种方法:
Criteria criteria = session.createCriteria(User.class,"user");
ProjectionList pList = Projections.projectionList();
criteria.setResultTransformer(Transformers.aliasToBean(User.class));
criteria.list();
第二种方法:
HQL查询
String hql = null;
hql = "SELECT new User(u.id,u.username,u.institution.institutionName) FROM User as u";
Query query = session.createQuery(hql);
query.list();
注意的地方是:
1、Criteria 查询需要提供相应字段的set和get方法,HQL需要提供相应的构造函数。
2、当User关联的外键 institutionId为null时,查询是必须使用Left join(
SELECT new User(u.id,u.username,ins.institutionName) FROM User as u LEFT JOIN u.institution as ins),
因为Hibernate默认是INNER JOIN,否则查询不出institutionId为null的记录.
3、编写的HQL语句中的各字段必须都有严格定义,例如:u.id,u.username而不是直接使用id,username。
另外: 也可以使用SQL语句查询自定义字段。
格式是:
SELECT new User(u.id,u.username,ins.institutionName) FROM TB_USER AS u LEFT JOIN TB_INSTITUTION AS ins ON ins.id = u.institutionId;
这种方法我没试过,有兴趣的朋友可以试试。
举一反三:
经测试:SELECT new User(u.id,u.username,new Institution(u.institution.institutionName)) FROM User as u
这种形式的语句是没办法通过的。Hibernate还没智能到可以在对象里面检测对象。
写的不对的地方,请指证;
欢迎大家评论,发表自己的意见。
List results = session.createCriteria(House.class)
.setProjection( Projections.groupProperty("id")).list(); 或者 List results = session.createCriteria(House.class)
.setProjection( Projections.projectionList()
.add( Projections.property("id")) )
.list();
Hibernate自定义字段查询的更多相关文章
- [wordpress]根据自定义字段排序并根据自定义字段查询
Wordpress中,根据根据自定义字段排序和查询是通过WP_Query()方法 如根据 一个自定义的sort的数字字段从小到大进行排序 $args = array( 'post_type' => ...
- Hibernate自定义数据库查询(排序、输出条数)
Hibernate数据库操作类(eg:TexDAO.java) /* * queryString HQL语句,first开始条数, max输出条数 ,norder排序 * 例: List lis = ...
- 【mybatis】mybatis自定义动态字段查询,mybatis实现动态字段查询,如果某个条件为null,则不查询某个字段,否则就查询某个字段
mybatis实现动态字段查询,如果某个条件为null,则不查询某个字段,否则就查询某个字段 先看一下 怎么实现动态的自定义字段查询: 例如: 而field 就是数据表中的某一个字段 String f ...
- Java自定义表单、自定义字段
最近想实现用户自定义数据库中的字段,我想大部分人第一想到的就是EAV(Entity-Attribute-Value),这种方式对于写一个小的毕业设计应该还可以使用,当然也有很多CMS系统采用这种方式, ...
- hibernate框架之-查询结果集返回类型
Hibernate支持HQL和SQL的查询,返回结果支持POJO类型或字段/数组的形式. 开发中用Hibernate进行数据库查询,用的是SQL.原来需要查询一个表的几乎所有字段,所以我使用了addE ...
- Hibernate原生SQL查询
最近在做一个较为复杂的查询,hibernate基本的查询不能满足,只好使用其提供的原生sql查询.参考网上的一些资料,做一些总结. 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行 ...
- hibernate的hql查询
1.概念介绍 1.Query是Hibernate的查询接口,用于从数据存储源查询对象及控制执行查询的过程,Query包装了一个HQL查询语句. 2.HQL是Hibernate Query Langua ...
- 帝国cms栏目自定义字段首页调用
例如:增加栏目自定义字段:chushi_bpic 用下面的灵动标签和调用: [e:loop={"select C.classid,C.classname,C.classimg,D.chush ...
- Hibernate原生SQL查询多表关联,SQL语句要注意的问题
Hibernate原生SQL查询多表关联,SQL语句要注意的问题 @for&ever 2009-9-4 系统环境: MySQL5.1 Hibernate3.3 有如下的假定: 实体类 Ques ...
随机推荐
- android 计时器
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- 文件重定向,getline()获取一样,屏幕输出流,格式控制符dec,oct,hex,精度控制setprecision(int num),设置填充,cout.width和file(字符),进制输入
1.在window下的命令重定向输出到文件里 2.将内容输入到某个文件里的方式:命令<1.txt (使用1.txt中的命令) 3.读取文件里的名,然后将命令读取最后输出到文件里.命令< ...
- shell 检查文件夹所属用户组
shell 检查文件夹所属用户组 #!/bin/bash # 检查文件夹 权限是否777 检查文件夹所属组是否www # authro ranmufei # 2017 08 21 云板容器版 /dat ...
- 机房收费系统(VB.NET)个人版总结
重构版个人机房收费系统大概从暑假开学開始进行.花了不到一个半月的时间才完毕.以下对我在重构过程中的一写理解. 1.系统设计一个非常重要的目的就是重用.而要做到重用,低耦合是最有效的手段回想一下我们C/ ...
- CPU Stepping
http://baike.baidu.com/view/16839.htm?fr=ala0_1_1 步进 编辑 步进(Stepping)是CPU的一个重要参数,也叫分级鉴别产品数据转换规范,“步进 ...
- postgres启动过程分析
今天来学习一下pg启动的过程. pg的启动命令./bin/postgres -D path/to/data. 1.主体监控进程 postmaster进程进入无限循环,等待客户端请求并为之提供请求的服务 ...
- POJ--2284--That Nice Euler Circuit【平面图欧拉公式】
链接:id=2284">http://poj.org/problem?id=2284 题意:一个自己主动绘图的机器在纸上(无限大)绘图,笔尖从不离开纸,有n个指令,每一个指令是一个坐标 ...
- selenium-python问题日记
今天在学习selenium时遇到了两个问题,在这里记录一下: 使用unittest框架组织了测试用例后,拓展一下功能就成了我最想做的事情, 所以决定添加发邮件功能. 使用python自带的smtpli ...
- HDU 3639 Hawk-and-Chicken
Hawk-and-Chicken Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 使用Qt发送HTTPS请求
示例代码: #include "mainwindow.h" #include "ui_mainwindow.h" #include <QNetworkAc ...