Hibernate之映射集合(有序集合)

 

单词sorted和ordered对于hibernate持久化集合却是指不同的东西。排序集合(sorted collection)是指用一个java比较器在内存中进行排序。有序集合(ordered collection)则指用一个包含order by子句的sql查询在数据库级中排序。

 

包(Bag)不可能被排序(可惜没有TreeBag),列表(list)也一样。列表元素的顺序由列表索引定义。排序只能用于set与map集合上,有序可以用于set,map,bag,list上。

 

如果在set与map上使用有序(order-by),我们这样定义接口即可,如:Set s = new HashSet(); Map m = new HashMap();

 

如果在set与map上使用排序(sort),我们必须这样定义接口:SortedSet s = new TreeSet(),SortedMap m = new TreeMap();

 

以映射map为例,我们使用有序(order-by):

 


 

pom.xml:

 

 

resources/hibernate.cfg.xml:

 

 

pojo/Item.java:

 

 

pojo/Item.hbm.xml:

 

 

util/HibernateUtil.java:

 

 

util/Manager.java:

 

 

表结构:

 

 

输出sql与日志:

 

 

 


 

 

 

上例中,order-by属性中的表达式是SQL order by子句的一个片段。在这个例子中,在集合的加载期间,hibernate按IMAGENAME

列的降序排列集合元素。甚至可以在order-by属性中包括SQL函数调用。

例如:<map ......  order-by="lower(FILENAME) DESC">...</map>

 

可以按集合表的任何列进行排列。Hibernate内部使用LinkedHashMap,它是保存关键元素插入顺序的一个映射变形。换句话说,就是在集合的加载期间,Hibernate把元素添加到集合的顺序,就是你在应用程序中见到的迭代顺序。用Set也可以完成同样的工作:hibernate内部使用LinkedHashSet。在java类中,属性是一般的Set/HashSet,但是Hibernate内部包含LinkedHashSet的包装再次通过order-by属性启用排列.

 

也可以让hibernate在集合的加载期间为你排列包(bag)的元素。Java集合属性是Collection/ArrayList或者List/ArrayList. hibernate内部使用ArrayList来实现一个保存了插入--迭代顺序的包:

<idbag name="images" table="ITEM_IMAGE" order-by="ITEM_IMAGE_ID DESC">...</idbag>

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值