关于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. C#使用PrintDocument打印 多页 打印预览

    PrintDocument实例所有的订阅事件如下: 创建一个PrintDocument的实例.如下: System.Drawing.Printing.PrintDocument docToPrint ...

  2. jQuery的ajax,当async为false时,同步操作失败。解决方式

    引发失败时代码: $.ajax({ url : 'your url', data:{name:value}, cache : false, async : true, type : "POS ...

  3. Python源代码--整数对象(PyIntObject)的内存池

    [背景] 原文链接:http://blog.csdn.net/ordeder/article/details/25343633 Python整数对象是不可变对象,什么意思呢?比如运行例如以下pytho ...

  4. 博客系统-评论or评论树

    url配置 url(r'^commentTree/(?P<article_id>\d+)/',views.commentTree), url(r'^(?P<username>. ...

  5. Redis HyperLogLog及应用

    参考:http://www.runoob.com/redis/redis-hyperloglog.html Redis 在 2.8.9 之后的版本中,添加了 HyperLogLog 结构,用来做基数统 ...

  6. centos 7.xx 安装LAMP环境

    一.安装Apache 1.安装yum -y install httpd2.开启apache服务systemctl start httpd.service3.设置apache服务开机启动systemct ...

  7. 关于Cascading

    Cascading是一个开源的Java库和应用程序编程接口(API),它为MapReduce提供了一个抽象层.它允许开发者构建出能在Hadoop集群上运行的复杂的.关键任务的数据处理应用. Casca ...

  8. 链式mapreduce

    在hadoop 中一个Job中可以按顺序运行多个mapper对数据进行前期的处理,再进行reduce,经reduce后的结果可经个经多个按顺序执行的mapper进行后期的处理,这样的Job是不会保存中 ...

  9. iOS内存管理机制解析之MRC手动引用计数机制

    前言: iOS的内存管理机制ARC和MRC是程序猿參加面试基本必问的问题,也是考察一个iOS基本功是 否扎实的关键,这样深入理解内存管理机制的重要性就不言而喻了. iOS内存管理机制发展史 iOS 5 ...

  10. MAC Safari上网弹窗弹广告的最新有效解决方法

    7.3更新: 之前更改DNS好了一段时间,最近在打开其它网页时还是会弹广告: 最终解决方法: 安装MALWAREBYTES 3清理一下: 网址:Free Cyber Security & An ...