`
ykyfendou
  • 浏览: 407664 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate中一对多Set的排序问题

阅读更多

hibernate中,我们往往会使用一对多等关联。

 

 

以一对多的DeptEmp为例:

 

Dept.java:

package com.yun.hibernate.vo;

 

import java.util.HashSet;

import java.util.Set;

 

public class Dept {

   private Integer deptId;

   private String deptName;

   

   private Set emps=new HashSet();

 

   public Set getEmps() {

      return emps;

   }

   public void setEmps(Set emps) {

      this.emps = emps;

   }

   

   public Integer getDeptId() {

      return deptId;

   }

   public void setDeptId(Integer deptId) {

      this.deptId = deptId;

   }

   public String getDeptName() {

      return deptName;

   }

   public void setDeptName(String deptName) {

      this.deptName = deptName;

   }

}

 

 

 

 

Emp.java:

 

package com.yun.hibernate.vo;

 

import java.util.Date;

 

public class Emp {

   private Integer empId;

   private String empName;

   

   private Dept dept=new Dept();

   

   public Dept getDept() {

      return dept;

   }

   public void setDept(Dept dept) {

      this.dept = dept;

   }

   public Integer getEmpId() {

      return empId;

   }

   public void setEmpId(Integer empId) {

      this.empId = empId;

   }

   public String getEmpName() {

      return empName;

   }

   public void setEmpName(String empName) {

      this.empName = empName;

   }
}

 

 

 

 

Dept.hbm.xml:

 

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC 

   "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

 

   <class name="com.yun.hibernate.vo.Dept" table="dept">

      <id name="deptId" column="deptid">

         <generator class="native" /><!-- 自动增长的 -->

      </id>

      <property name="deptName" type="string"/>

       <set name="emps" inverse="true" cascade="all">

           <key column="deptid" 

               not-null="true"/>

           <one-to-many class="com.yun.hibernate.vo.Emp"/>

       </set>

   </class>

   

</hibernate-mapping>

 

 

Emp.hbm.xml:

 

 

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC 

   "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

 

 

   <class name="com.yun.hibernate.vo.Emp" table="emp">

      <id name="EmpId" column="empid">

         <generator class="native" /><!-- 自动增长的 -->

      </id>

      <property name="empName" type="string"/>

      

      <many-to-one name="dept" 

        column="deptid"

        not-null="true"/>

 

   </class>

</hibernate-mapping>

 

 

   

我们在Dept中为了实现一对多,所以设置了一个Set集合,但是我们知道,Set是无序的,而我们在遍历的时候,基本不可能需要无序的遍历,那么就需要对Set进行排序,我们可以使用实现类TreeSet,但是比较麻烦。

 

最好的解决办法是:直接在hbm文件中配置一下就可以进行排序了:

 

Set上配置一个order-by=" *** ”属性就可以进行排序了,

 

 

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC 

         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

 

         <class name="com.yun.hibernate.vo.Dept" table="dept">

                   <id name="deptId" column="deptid">

                            <generator class="native" /><!-- 自动增长的 -->

                   </id>

                   <property name="deptName" type="string"/>

               <set name="emps" inverse="true" cascade="all" order-by="empid asc">

                 <key column="deptid" 

                     not-null="true"/>

                 <one-to-many class="com.yun.hibernate.vo.Emp"/>

             </set>

         </class>

         

</hibernate-mapping>

 

 

其中order-by="empid asc" empidemp表中的字段,而不是Emp.hbm.xml中的属性。

 

 

当然排序的时候可以指定多个字段进行排序:

<set name="courses" inverse="true" order-by="weekday asc, period asc, roomId asc">

 

分享到:
评论

相关推荐

    hibernate 一对多 set 与 list 分别用法

    本篇文章将深入探讨`Hibernate`中一对多关系使用`Set`和`List`的区别以及它们的实现方式。 首先,我们要理解`Set`和`List`在Java集合框架中的本质区别。`Set`不包含重复元素,且内部元素有序,但插入顺序不保证;而...

    hibernate 一对多关联

    下面将详细探讨Hibernate中一对多关联的概念、配置、实现以及相关最佳实践。 **1. 概念理解** 在数据库设计中,一对多关联是指一个表的记录可以与另一个表的多个记录相关联。在Hibernate中,这可以通过在映射文件或...

    Hibernate集合映射

    集合映射是Hibernate中一个非常关键的概念,它使得Java集合类如List、Set、Map等能够与数据库中的多对一、一对多、多对多关系对应起来。在这个主题中,我们将深入探讨Hibernate集合映射的各个方面。 首先,我们来看...

    hibernate资料从初级到高级

    2. 关联映射:包括一对一、一对多、多对一、多对多关系的映射,以及懒加载和立即加载策略。 3. 集合映射:集合类型如List、Set、Map等在Hibernate中的映射方法和注意事项。 4. 动态模型和动态更新:允许程序在运行...

    Criteria.doc

    Criteria API 还支持其他高级功能,例如排序(`setOrder()`),分组(`setGroupBy()`),限制结果集大小(`setFirstResult()` 和 `setMaxResults()`),以及关联查询(`createCriteria()` 用于关联实体)。...

    java面试宝典

    (如:一对多、多对多的关系) 22 99、说下Hibernate的缓存机制 22 100、Hibernate的查询方式 23 101、如何优化Hibernate? 23 102、Struts工作机制?为什么要使用Struts? 23 103、Struts的validate框架是如何验证的...

    java面试题

    (如:一对多、多对多的关系) 60 71.9. 说下Hibernate的缓存机制 60 71.10. Hibernate的查询方式 60 71.11. 如何优化Hibernate? 61 71.12. Hibernate和spring中常出现的几个异常 61 71.13. Hibernate与jdbc的联系 62...

    QBC的各种查询

    3. **排序查询**:通过Criteria的setOrder(Order order)或addOrder(Order order)方法进行排序,Order接口的asc()和desc()分别代表升序和降序。 4. **分组查询**:Criteria的createCriteria(String associationPath)...

    最新Java面试宝典pdf版

    12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托...

    Java面试宝典-经典

    12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托...

    Java面试宝典2012版

    12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中...

    java面试宝典2012

    12、写Hibernate的一对多和多对一双向关联的orm配置? 134 9、hibernate的inverse属性的作用? 134 13、在DAO中如何体现DAO设计模式? 134 14、spring+Hibernate中委托方案怎么配置? 134 15、spring+Hibernate中委托...

    SpringBoot项目中分页插件PageHelper无效的问题及解决方法

    PageHelper是Java中一个非常流行的分页插件,广泛应用于各种 Java Web 项目中,包括 SpringBoot 项目。但是,在 SpringBoot 项目中使用 PageHelper 时,经常会遇到一些问题,例如插件失效、无法分页等问题。今天,...

    数据库实验复习.docx

    假设我们有一个订单表,其中包含用户ID作为外键,这样可以链接到用户表,形成一对多的关系。创建外键约束的SQL语句可能如下: ```sql CREATE TABLE Orders ( order_id INT PRIMARY KEY, user_id INT, product ...

    java面试题及答案-非常全面(包括基础、网络、数据结构、算法及IT大厂面经)

    - **内存模型**:规定了变量的存储位置以及线程对变量的操作规则。 #### 垃圾回收机制 - **GC算法**:包括标记-清除、复制、标记-整理等算法。 - **垃圾回收器**:如Serial、ParNew、Parallel Scavenge等。 - **分...

Global site tag (gtag.js) - Google Analytics