`

hibernate查询之交叉查询误用

 
阅读更多
T1:(多的一方)
public class T1 implements java.io.Serializable {

	// Fields

	private Long id;

	private T t;

	private String name;

	private Date year;

	// Constructors

	/** default constructor */
	public T1() {
	}

	/** full constructor */
	public T1(T t, String name, Date year) {
		this.t = t;
		this.name = name;
		this.year = year;
	}

	// Property accessors

	public Long getId() {
		return this.id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public T getT() {
		return this.t;
	}

	public void setT(T t) {
		this.t = t;
	}

	public String getName() {
		return this.name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Date getYear() {
		return this.year;
	}

	public void setYear(Date year) {
		this.year = year;
	}

}

 one的一方:

package com.model;

import java.util.HashSet;
import java.util.Set;

/**
 * T generated by MyEclipse Persistence Tools
 */

public class T implements java.io.Serializable {

	// Fields

	private Long id;

	private String name;

	private Set t1s = new HashSet(0);

	// Constructors

	/** default constructor */
	public T() {
	}

	/** full constructor */
	public T(String name, Set t1s) {
		this.name = name;
		this.t1s = t1s;
	}

	// Property accessors

	public Long getId() {
		return this.id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return this.name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Set getT1s() {
		return this.t1s;
	}

	public void setT1s(Set t1s) {
		this.t1s = t1s;
	}

}

 查询语句:

 Session session = HibernateSessionFactory.getSession();
  String hql = "from T t where t.id =1 order by t.t1s.year asc";
  Query q = session.createQuery(hql);
  List<T> list = q.list();
  for(T t : list){
   System.out.println("t\t" + t.getId());
   Set<T1> set = t.getT1s();
   for(T1 t1 : set){
    System.out.println("t1\t" + t1.getId());
   }
  }

 输出结果:

Hibernate: select t0_.ID as ID0_, t0_.NAME as NAME0_ from SCOTT.T t0_, SCOTT.T1 t1s1_ where t0_.ID=t1s1_.T_ID and t0_.ID=1 order by t1s1_.YEAR asc
t 1
Hibernate: select t1s0_.T_ID as T2_1_, t1s0_.ID as ID1_, t1s0_.ID as ID1_0_, t1s0_.T_ID as T2_1_0_, t1s0_.NAME as NAME1_0_, t1s0_.YEAR as YEAR1_0_ from SCOTT.T1 t1s0_ where t1s0_.T_ID=?
t1 4
t1 5
t1 3
t 1
t1 4
t1 5
t1 3
t 1
t1 4
t1 5
t1 3

  查看输出结果,发现,每一条数据都输出了三次。

仔细看了下hql语句:

Hibernate: select t0_.ID as ID0_, t0_.NAME as NAME0_ from SCOTT.T t0_, SCOTT.T1 t1s1_ where t0_.ID=t1s1_.T_ID and t0_.ID=1 order by t1s1_.YEAR asc

 发现,竟然是交叉查询。

看来,想在一的一端(T)对多(T1)的一端里面的数据进行排序是不行的。阿门,只能用其他的方式了! 

分享到:
评论

相关推荐

    Hibernate连表查询 Hibernate连表查询

    根据提供的文件信息,我们可以深入探讨Hibernate中的连表查询方法及其应用。下面将详细介绍与标题、描述及部分代码相关的几个核心知识点: ### Hibernate 连表查询基础 Hibernate 是一个开源的对象关系映射(ORM)...

    Hibernate_query查询数据表中的一个字段.

    Hibernate提供了一种灵活的查询语言——HQL(Hibernate Query Language),以及 Criteria 查询和 Criteria API,它们都可以用来获取数据表中的特定字段。 二、Hibernate配置 在使用Hibernate进行查询前,首先需要...

    通用的hibernate查询

    【hibernate查询详解】 Hibernate,作为一款强大的Java对象关系映射(ORM)框架,极大地简化了数据库操作。它允许开发者使用面向对象的方式来处理数据库,从而避免了传统的JDBC编码方式带来的复杂性。本篇文章将...

    struts+hibernate查询所有记录

    ### Struts+Hibernate查询所有记录 #### 一、概述 在Java Web开发中,Struts与Hibernate是非常流行的框架组合,用于构建复杂的企业级应用。本文将详细介绍如何利用Struts和Hibernate来实现对Oracle数据库中所有...

    hibernate多表联合查询

    ### Hibernate多表联合查询详解 #### 一、引言 在实际项目开发中,我们经常需要处理复杂的数据库查询,特别是涉及到多个表之间的关联查询。Hibernate作为一款流行的Java持久层框架,提供了一种非常便捷的方式来处理...

    超好用的hibernate查询工具类

    本篇将详细讲解一个“超好用的Hibernate查询工具类”,以及如何利用它来提升开发效率。 首先,我们需要理解Hibernate的基本概念。Hibernate是一种持久化框架,它可以将Java对象映射到数据库表,从而避免了编写大量...

    Hibernate查询练习小例子

    利用MYSQL数据库提供的样例数据库world建立的查询小例子。已经建立好了数据库对应的...本项目主要是为了练习使用Hibernate查询数据库。如果有什么问题可以发站内信或者邮件asddf14@hotmail.com。我会尽量解答一下~~~

    Hibernate查询方式代码示例

    **Hibernate查询方式详解** 在Java世界中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本教程将深入探讨Hibernate 3.x版本中的查询方式,包括基本查询、HQL(Hibernate Query ...

    Hibernate查询语言HQL.PPT

    Hibernate 查询语言 HQL Hibernate 查询语言 HQL 是一种面向对象的查询语言,用于检索对象。它提供了灵活多样的查询机制,包括导航对象图、通过标识符检索、使用 HQL 检索对象、使用 Hibernate 条件 API 和使用本地...

    Hibernate分页查询小结

    Hibernate分页查询小结

    hibernate查询详解

    本文将详细介绍Hibernate的五种查询方式,包括HQL查询、Criteria方法、动态查询DetachedCriteria、例子查询、SQL查询以及命名查询,以满足不同场景下的需求。 1. HQL查询: Hibernate Query Language(HQL)是一种...

    hibernate 查询?Hibernate的HQL查询

    Hibernate作为流行的Java ORM框架,它的查询机制是其独特之处。其中,Criteria Query允许通过对象模型进行查询,提高了代码的可读性,但不支持所有复杂的SQL操作。而HQL则弥补了这一不足,它是一种面向对象的查询...

    Hibernate的查询方式

    Hibernate作为Java领域中最流行的ORM(Object-Relational Mapping)框架之一,提供了一系列高效、灵活的查询机制,旨在桥接对象模型与关系数据库之间的鸿沟。本文将深入探讨Hibernate的查询方式,特别聚焦于HQL...

    hibernate实现动态SQL查询

    本篇文章主要探讨如何利用Hibernate实现动态SQL查询,结合XML配置和FREEMARKER模板引擎来生成执行的SQL语句。 一、Hibernate简介 Hibernate作为一款强大的持久层框架,它简化了Java应用程序与数据库之间的交互。...

    hibernate查询方法

    Hibernate,作为Java领域中最流行的持久化框架之一,提供了多种查询数据的方法。这些方法使得开发者能够高效地从数据库中检索、更新和删除数据,无需编写大量SQL语句。本篇文章将深入探讨Hibernate中的查询技术,...

    hibernate里面的 两种查询

    在Java的持久化框架Hibernate中,查询是连接应用程序与数据库的关键环节。Hibernate提供了两种主要的查询方式:离线查询(Criteria API)和HQL(Hibernate Query Language)语句查询。这两种查询方法各有特点,适用...

    hibernate查询代码

    在本篇文章中,我们将深入探讨Hibernate的查询机制,以及如何通过`hibernate.cfg.xml`配置文件来设置和管理数据库连接。 首先,让我们来看看Hibernate的核心配置文件`hibernate.cfg.xml`。这个文件是Hibernate与...

    hibernate将本地SQL查询结果封装成对象

    当我们需要执行一些特殊的、复杂的或者非标准的SQL查询时, Hibernate的本地SQL查询功能就显得尤为实用。本文将深入探讨如何使用Hibernate将本地SQL查询的结果封装成对象。 首先,本地SQL查询(Native SQL)是指...

    hibernate 模糊查询 分页

    本篇文章将深入探讨如何使用Hibernate实现模糊查询和分页功能,这对于任何需要处理大量数据的应用程序来说都是至关重要的技能。 首先,让我们了解Hibernate的核心概念。Hibernate是一个开源的JPA(Java Persistence...

Global site tag (gtag.js) - Google Analytics