hibernate 集合映射之有序集合

hibernate 有时候会出现集合映射的情况,一般One-to-many的时候会用到。主要形式为:

model:

public class TestPerson {
       private Long pid;
       private String pname;
       private String age;
       private Set<TestRole> testRole = new HashSet<TestRole>();

-------get() set()方法------

}

xml:

<set name="testRole" table="test_role" lazy="true" sort="com.qsfs.util.Compare">
   <key column="TESTPERSOPN" />
   <one-to-many class="com.qsfs.model.TestRole" />// TestRole也是一个类,与testPerson多对一的关系
</set>

如果要查询出的集合排序好的,那么有两种方法:

(1)数据库排序:利用 set,bag 或者 map 映射中的 order-by 属性

<set name="testRole" table="test_role" lazy="true" order-by="roleName asc">//roleName为数据库字段
   <key column="TESTPERSOPN" />
   <one-to-many class="com.qsfs.model.TestRole" />
</set>

(2)内存排序 :利用 set,bag 或者 map 映射中的 sort 属性,sort 属性中允许的值包括 unsorted,natural 和某个实现了 java.util.Comparator 的类的名称
1,sort 属性值为:natural

<set name="testRole" table="test_role" lazy="true" sort="natural">//按照compareTo的方式进行排序,应该为升序

<key column="TESTPERSOPN" />
   <one-to-many class="com.qsfs.model.TestRole" />
</set>

2,sort 属性值为:某个实现了 java.util.Comparator 的类的名称
  <set name="testRole" table="test_role" lazy="true" sort="com.qsfs.util.Compare">
   <key column="TESTPERSOPN" />
   <one-to-many class="com.qsfs.model.TestRole" />
  </set>

package com.qsfs.util;

import java.util.Comparator;
public class Compare implements Comparator{

public int compare(Object o1, Object o2) { 
  TestRole r1 = (TestRole)o1;
  TestRole r2 = (TestRole)o2;
  if(r1 == r2){
   return 0;
  }
  int result = r1.getRid().compareTo(r2.getRid());
  return result;//降序为-result
 }
}

时间: 2024-10-12 16:06:53

hibernate 集合映射之有序集合的相关文章

Redis 的数据类型 - Zset 集合类型:有序集合

ZADD:将元素及其分数添加到集合中 语法:ZADD key courseScore member [courseScore member] ZADD courseScore 100 tom ZADD courseScore 99 jerry 88 mario 77 jack 66 lucy 55 chris ZADD courseScore 60 tom 67 apple 56 cherry #这里 tom 已经存在了,直接略过不执行,返回值为 2 # ZADD courseScore 12.

【Hibernate步步为营】--最后的集合映射

上篇文章详细讨论了组合对象映射的原理,它其实指的是如何将对象模型中的组合关系映射到关系模型中,它是通过使用Hibernate提供的<component>标签来实现的,并需要在该标签中添加对应组合对象的属性,有关组合对象的映射请查看笔者的上篇文章.该篇文章来详细讨论下集合的映射关系,Java的集合有四种分别是Set.Map.List和普通集合,在开发时往往需要将这些集合转化为对应的关系模型,这种集合映射的实现过程就是我们今天要讨论的话题. 一.集合映射 1.1 集合小介 集合映射也是基本的映射,

辛星浅析Redis中的有序集合

Redis中的有序集合也就是sorted-set,它和set很相似,都是字符串的集合,都不允许重复的成员出现在一个集合张.有序集合与集合的主要差别是有序集合中的每一个元素都有一个序号与其相连,这个序号即score,Redis通过这个序号来为集合中的成员进行从小到大的排列.需要特别说明的是,尽管有序集合的元素值是唯一的,但是该value对应的score却可以是多个.在有序集合中添加.删除.更新一个成员的操作都很快,其时间复杂度是集合中成员的对数. 因为有序集合中的成员在集合中的位置是有序的,即便是

Hibernate的执行流程和集合的映射关系

Hibernate的执行流程 集合映射 准被hibernate的运行环境 配置hibernate.cfg.xml主配置文件 1.Set集合 写User.java类 package com.gqx.collection; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; /** * javaBean的设计 *

Hibernate 集合映射 一对多多对一 inverse属性 + cascade级联属性 多对多 一对一 关系映射

1 . 集合映射 需求:购物商城,用户有多个地址. // javabean设计 // javabean设计 public class User { private int userId; private String userName; // 一个用户,对应的多个地址 private Set<String> address; private List<String> addressList = new ArrayList<String>(); //private Str

hibernate集合映射

package loaderman.a_collection; import java.util.HashSet; import java.util.Set; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.classic.Session; import org.junit.Test; public class App { private stati

攻城狮在路上(壹) Hibernate(十)--- 映射值类型集合

一.映射Set(集):未排序,无重复. 实例代码: ? 1 2 3 4 <set name="images" table="IMAGES" lazy="true" > <key column="CUSTOMER_ID" /> <element column="FILENAME" type="string" not-null="true"/

Hibernate笔记③--集合映射、组合映射、联合主键、查询案例

lazy 懒加载 默认为proxy ? 继承映射 discriminant column="type" type="string" ? 集合映射 生成表的语句: public class DbCreate { ????public static void main(String[] args) { ????????Configuration cfg=new Configuration().configure("/hibernate.cfg.xml"

hibernate 映射关系—集合映射

1.集合映射简介 当持久化类中有一个值类型的集合,那么就需要一张额外的数据库表来保存这个值类型集合的数据,这张表被称为集合表.比如有一张学生表,学生可能有很多爱好,就需要一种学生爱好集合表来存储学生的爱好信息. Hibernate支持大部分重要的JDK集合接口映射,主要有以下几种. 1. set 可以映射类型为java.util.Set接口的属性,它的元素存放没有顺序且不允许重复:也可映射类型为java.util.SortSet接口的属性.它的元素可以按自然顺序排列. 2. list 可以映射类