`

hibernate 集合排序 二 (数据库排序)

阅读更多

 

<set><idbag><map>元素都有order-by属性,如果设置了该属性,Hibernate会利用 order by 子句进行排序



使用order-by属性,我们可以通过hbm文件执行生成的SQL如何使用order by 查询子句以返回排序后的结果集

数据库结构:

create table teamOrder (id varchar(32),teamname varchar(32));
create table studentOrder (id varchar(32),name varchar(32),description varchar(32),team_id varchar(32));
insert into teamOrder values("1","team1");
insert into studentOrder values("1","a","a","1");
insert into studentOrder values("2","b","b","1");
insert into studentOrder values("3","c","c","1");
 

pojo:

package Collection.Order;

import java.util.Set;

public class Team {
   private String id;
   private String teamname;
   private Set students;
public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}
public String getTeamname() {
    return teamname;
}
public void setTeamname(String teamname) {
    this.teamname = teamname;
}
public Set getStudents() {
    return students;
}
public void setStudents(Set students) {
    this.students = students;
}

}
 
package Collection.Order;

public class Student {
  private String id;
  private String name;
  private String description;
  private Team team;
public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getDescription() {
    return description;
}
public void setDescription(String description) {
    this.description = description;
}

public Team getTeam() {
    return team;
}
public void setTeam(Team team) {
    this.team = team;
}
}
 

Hibernate.cfg.xml

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

<session-factory>
    <property name="connection.username">root</property>
    <property name="connection.url">
        jdbc:mysql://localhost:3306/schoolproject?characterEncoding=gb2312&amp;useUnicode=true
    </property>
    <property name="dialect">
        org.hibernate.dialect.MySQLDialect
    </property>
    <property name="myeclipse.connection.profile">mysql</property>
    <property name="connection.password">1234</property>
    <property name="connection.driver_class">
        com.mysql.jdbc.Driver
    </property>
    <property name="hibernate.dialect">
        org.hibernate.dialect.MySQLDialect
    </property>
    <property name="hibernate.show_sql">true</property>
    <property name="current_session_context_class">thread</property>
    <property name="jdbc.batch_size">15</property>
    <mapping resource="Collection/Order/Student.hbm.xml" />
    <mapping resource="Collection/Order/Team.hbm.xml" />

</session-factory>

</hibernate-configuration>
 

Student.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="Collection.Order.Student" table="studentOrder" >
    <id name="id" unsaved-value="null">
      <generator class="uuid.hex"></generator>
    </id>
 
    <property name="name" type="string" column="name"></property>
  
    <property name="description" type="string" column="description"></property>
    <many-to-one name="team"
                 column="team_id"
                 class="Collection.Order.Team"
                 cascade="none"
                 fetch="join">
    </many-to-one>
</class>

</hibernate-mapping>
 


Team.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="Collection.Order.Team" table="teamOrder" >
    <id name="id" unsaved-value="null">
      <generator class="uuid.hex"></generator>
    </id>
    <property name="teamname" type="string" column="teamname"></property>
    <!-- 以名称降序返回student集合 -->
    <set name="students" table="studentOrder" cascade="all" order-by="name desc">
      <key column="team_id"></key>
      <one-to-many class="Collection.Order.Student"/>
    </set>
</class>

</hibernate-mapping>

 


测试代码:

package Collection.Order;


import java.io.File;
import java.util.Iterator;
import java.util.Set;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class Test {


    public static void main(String[] args) {

        String filePath=System.getProperty("user.dir")+File.separator+"src/Collection/Order"+File.separator+"hibernate.cfg.xml";
        File file=new File(filePath);
        System.out.println(filePath);
        SessionFactory sessionFactory=new Configuration().configure(file).buildSessionFactory();
        Session session=sessionFactory.openSession();
        Transaction t=session.beginTransaction();
       
        Team team=(Team)session.createQuery("from Team t where t.teamname='team1'").uniqueResult();
        Set result=team.getStudents();
        for (Iterator iterator = result.iterator(); iterator.hasNext();) {
            Student object = (Student) iterator.next();
            System.out.println(object.getName());
        }
       
        t.commit();
       
    }

}
 


测试结果:

Hibernate: select team0_.id as id1_, team0_.teamname as teamname1_ from teamOrder team0_ where team0_.teamname='team1'
Hibernate: select students0_.team_id as team4_1_, students0_.id as id1_, students0_.id as id0_0_, students0_.name as name0_0_, students0_.description as descript3_0_0_, students0_.team_id as team4_0_0_ from studentOrder students0_ where students0_.team_id=? order by students0_.name desc
c
b
a

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Hibernate集合映射

    综上所述,Hibernate集合映射是将Java集合类与数据库表关联的关键机制,涵盖了从一对一、一对多到多对多的各种关系映射。理解并熟练掌握这些映射方式,能够帮助开发者更好地设计和实现数据持久化层,提高代码的可...

    [原]Hibernate集合映射

    总之,Hibernate集合映射是对象关系映射的重要组成部分,理解并熟练掌握各种映射类型、级联操作、缓存策略等,将有助于我们在实际开发中更高效、更灵活地处理数据库与Java对象之间的关系。在实践中,不断调整和优化...

    HIBERNATE - 符合Java习惯的关系数据库持久化

    3. **排序集合**:对于需要按特定顺序存储的集合,可以使用排序集合(Sorted Collection)。 4. **双向关联**:在实体类之间建立双向引用关系,确保数据的一致性和完整性。 #### 七、关联映射 关联映射是对象关系...

    hibernate set 集合映射

    ### Hibernate集合映射基础 1. **集合类型**:Hibernate支持多种集合类型映射,如Set、List、ArrayList、LinkedList、Map等。Set是最常见的集合映射类型,它不允许重复元素,与数据库中的唯一约束相对应。 2. **...

    hibernate bag 集合映射

    在Hibernate中,集合映射是指将数据库中的表与Java集合对象(如List、Set等)进行关联,方便对一组相关数据进行操作。 "bag"是Hibernate中的一种集合类型,表示无序的、可重复的对象集合。在数据库层面,这通常对应...

    hibernate list集合映射

    在Java的持久化框架Hibernate中,集合映射是将数据库中的表与Java对象的集合属性关联的过程。List集合映射是其中常见的一种方式,它允许我们将数据库中的一组相关记录映射到Java对象的List列表中。这种映射机制使得...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

    hibernate 3.6 中文 chm

    6. **HQL(Hibernate Query Language)**:类似于SQL,但专为ORM设计,HQL允许开发者以面向对象的方式执行数据库查询,支持复杂的查询操作,如关联查询、分组、排序等。 7. **事务管理**:在数据库操作中,事务的...

    hibernate 集合映射

    Hibernate是一款强大的Java持久化框架,它简化了数据库操作,使得开发者无需直接编写SQL语句,而是通过对象关系映射(ORM)技术将Java对象与数据库表进行对应。在实际开发中,我们常常会遇到Java对象中包含集合属性...

    hibernate帮助文档下载

    Hibernate,作为Java领域中的一款强大且广泛应用的对象关系映射(ORM)框架,极大地简化了数据库操作。它允许开发者使用面向对象的编程方式来处理数据库交互,而无需直接编写SQL语句。这篇文档将深入探讨Hibernate的...

    hibernate api

    Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者在Java对象和数据库记录之间建立映射,从而简化数据库编程。Hibernate API是这个框架的核心,提供了多种接口和类,帮助开发者实现数据的持久化操作...

    hibernate-3.6.8-doc-zh

    Hibernate是一个开源的Java库,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据,而不是传统的SQL语句。在Hibernate的帮助下,开发者可以避免大量重复的JDBC代码,提高开发效率和代码的可维护性。 ...

    hibernate帮助手册和api集合(含英文中文版)

    总之,这份“Hibernate帮助手册和API集合”是学习和使用Hibernate的宝贵资料,无论你是初学者还是经验丰富的开发者,都可以从中找到所需的信息,提升开发效率,更好地利用Hibernate进行Java应用的数据库操作。

    hibernate源码分析过程

    Hibernate 的集合映射可以将一个对象的集合属性映射到数据库中。集合映射可以是 set、list、map、bag、array 等。级联策略控制可以控制集合元素的保存和删除。排序策略可以控制集合元素的顺序。 聚合映射 ...

    hibernate基础教程.pdf

    Hibernate 是一个开源的对象关系映射(ORM)框架,它允许开发者用面向对象的方式来处理数据库操作。ORM 解决了在 Java 应用程序中使用传统 JDBC 进行数据库操作时遇到的繁琐代码问题,将数据库中的表与 Java 对象...

    Hibernate参考指南

    Hibernate为Java应用程序提供了数据库访问的便利,通过将Java对象与数据库表进行映射,实现了数据的透明访问。其核心理念是对象持久化,即将Java对象的状态保存到关系数据库中。Hibernate通过XML或注解方式定义映射...

    hibernate资料从初级到高级

    3. 集合映射:集合类型如List、Set、Map等在Hibernate中的映射方法和注意事项。 4. 动态模型和动态更新:允许程序在运行时动态创建和更新实体类,增加了灵活性。 5. 自动更新和级联操作:当实体状态改变时,...

    hibernate3.2

    10. **集合映射**:在Hibernate 3.2中,可以映射各种类型的集合,如List、Set、Map等,同时支持一对多、多对一、一对一等多种关联关系。 11. **延迟加载(Lazy Loading)**:为了解决性能问题,Hibernate 提供了懒...

    Hibernate中文Api最新参考文档

    Hibernate是一个开源的对象关系映射(ORM)框架,它为Java开发者提供了方便的数据持久化服务,使得开发人员可以使用面向对象的方式来操作数据库,而无需关心底层SQL语句的编写。本文档主要围绕Hibernate的最新中文...

Global site tag (gtag.js) - Google Analytics