关于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 criteria = session.createCriteria(User.class,"user");

criteria.createCriteria("institution","institution");
 

ProjectionList pList = Projections.projectionList();

pList.add(Projections.property("user.id").as("id"))
add(Projections.property("user.username").as("username"))
.add(Projections.property("institution.institutionName").as("institutionName"));

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自定义字段查询的更多相关文章

  1. [wordpress]根据自定义字段排序并根据自定义字段查询

    Wordpress中,根据根据自定义字段排序和查询是通过WP_Query()方法 如根据 一个自定义的sort的数字字段从小到大进行排序 $args = array( 'post_type' => ...

  2. Hibernate自定义数据库查询(排序、输出条数)

    Hibernate数据库操作类(eg:TexDAO.java) /* * queryString HQL语句,first开始条数, max输出条数 ,norder排序 * 例: List lis = ...

  3. 【mybatis】mybatis自定义动态字段查询,mybatis实现动态字段查询,如果某个条件为null,则不查询某个字段,否则就查询某个字段

    mybatis实现动态字段查询,如果某个条件为null,则不查询某个字段,否则就查询某个字段 先看一下 怎么实现动态的自定义字段查询: 例如: 而field 就是数据表中的某一个字段 String f ...

  4. Java自定义表单、自定义字段

    最近想实现用户自定义数据库中的字段,我想大部分人第一想到的就是EAV(Entity-Attribute-Value),这种方式对于写一个小的毕业设计应该还可以使用,当然也有很多CMS系统采用这种方式, ...

  5. hibernate框架之-查询结果集返回类型

    Hibernate支持HQL和SQL的查询,返回结果支持POJO类型或字段/数组的形式. 开发中用Hibernate进行数据库查询,用的是SQL.原来需要查询一个表的几乎所有字段,所以我使用了addE ...

  6. Hibernate原生SQL查询

    最近在做一个较为复杂的查询,hibernate基本的查询不能满足,只好使用其提供的原生sql查询.参考网上的一些资料,做一些总结. 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行 ...

  7. hibernate的hql查询

    1.概念介绍 1.Query是Hibernate的查询接口,用于从数据存储源查询对象及控制执行查询的过程,Query包装了一个HQL查询语句. 2.HQL是Hibernate Query Langua ...

  8. 帝国cms栏目自定义字段首页调用

    例如:增加栏目自定义字段:chushi_bpic 用下面的灵动标签和调用: [e:loop={"select C.classid,C.classname,C.classimg,D.chush ...

  9. Hibernate原生SQL查询多表关联,SQL语句要注意的问题

    Hibernate原生SQL查询多表关联,SQL语句要注意的问题 @for&ever 2009-9-4 系统环境: MySQL5.1 Hibernate3.3 有如下的假定: 实体类 Ques ...

随机推荐

  1. 最新的hustoj搭建姿势

    试着照某度上的教程搭了一下hustoj,出了一些问题,之前的搭建姿势很多已经不适用了,重新整理一下思路,方法二简单粗暴: 方法一: 首先虚拟机安装了Elementory OS (基于Ubuntu的衍生 ...

  2. ubuntu uninstall postgres

    Steps that worked for me on Ubuntu 8.04.2 to remove postgres 8.3 List All Postgres related packages ...

  3. java zip压缩文件和文件夹

    public class FileUtil { /** * 压缩文件-File * @param out zip流 * @param srcFiles 要压缩的文件 * @param path 相对路 ...

  4. poj1703 Find them,Catch them 【并查集】

    做过一些的带权并查集,再来做所谓的"种类并查集",发现好像就顿悟了. 种类并查集与带权并查集实质上的区别并不大. 关键的区别就是种类并查集仅仅是带权并查集再弄个%取余操作而已.然后 ...

  5. Linux性能查看与分析--命令行工具介绍

    本文介绍工作中常用的几个linux性能查看命令:top,sar,vmstat,iostat,pidstat等. 1.top top是最常用的linux性能分析工具,它能够实时的显示系统中各个进程的资源 ...

  6. 全志Android SDK编译详解(一)

    1.编译环境说明 Linux 服务器(任意电脑都可以,建议选择配置高的)安装ubuntu 10.04 作为编译的主机,其他开发者在xp 下,通过SSH/Telent 等协议登录linux 主机进行编. ...

  7. MySQL 数据库 的安装和基本管理

    03-MySql安装和基本管理   本节掌握内容: mysql的安装.启动 mysql破解密码 统一字符编码 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Orac ...

  8. 常见mysql分布式数据中间件

    一般分为三种: 1. proxy sharding,目前由cobar,mycat,drds,atlas修改,这几个产品的起源一般是mysqlproxy 或 ameoba,特点是mysql协议基本兼容, ...

  9. Session 钝化机制

  10. How MySQL Opens and Closes Tables refuse connections 拒绝连接的原因 file descriptors

    MySQL :: MySQL 5.7 Reference Manual :: 8.4.3.1 How MySQL Opens and Closes Tables https://dev.mysql.c ...