http://hi.baidu.com/qihuitoday/blog/item/45b470075f50eac77a894730.html
举例1:
在对应的hbm.xml文件中所需要修改的set标签加上order-by属性即可~
eg.
<key>
<column name="classID" not-null="true" unique="true" />
</key>
<one-to-many class="org.banana.mms.model.Course" />
</set>
当然,order-by里用的是中间表的字段~
举例2:
大家都知道one-to-many的排序可以通过配置一个order-by="** desc"即可实现
如:
代码
<set name="clubMessage" table="club_Message" inverse="true" cascade="delete" order-by="create_time desc"> <key column="club_id" /> <one-to-many class="com.test.item.club.domain.ClubMessageVO" /> </set> |
上面的hbm属性意义是:一个社区对应多条社区消息,同时将这些消息按create_time排序
import java.util.Comparator; import my.User; public class GBComparator implements Comparator{ public int compare(Object o1, Object o2){ if(o1 == null){ return o2 == null ? 0 : 1; } if(o2 == null){ return -1; } if(o1 instanceof User && o2 instanceof User){ return ((User)o1).getAccount().compareTo(((User)o2).getAccount()); } return 0; } } <set name="users" table="USER_GROUP_REL" cascade="none" inverse="true" sort="my.GBComparator"> <key column="GROUPING_ID" /> <many-to-many column="USER_ID" class="User" /> </set> |
举例3:
<set name="userServiceSet" order-by="service_id" cascade="all" inverse="true">
<key column="user_id" />
<one-to-many class="UserService"/>
</set>
注:order-by 的值service_id为 UserService对象所对应的数据库表的列名(字段名)
举例4:
其实也没有什么,内行的人觉得这个是小Case吧。呵呵,这里我不是想说具体的方法,主要是一个感想:<map
name="propertyName"
table="table_name"
lazy="true|false"
inverse="true|false"
cascade="all|none|save-update|delete|all-delete-orphan"
sort="unsorted|natural|comparatorClass"
order-by="column_name asc|desc"
... 其他属性
>
<key ... />
<map-key ... />
<element ... />
</map>
很多人首先想到的是sort,而且sort已经给出了排序的实现,我们只管天上属性方可。可是我们大多程序员是从学 SQL 转到 Hibernate 这个 ORM 的持久层框架上来的,旧有的观念还是喜欢“order by xxxx desc”。不是说自己怀旧,我发现很多朋友都有这个习惯。所以,一般来说还是建议使用 order-by="column_name asc|desc" 这个属性进行对应表字段的排序配置。在一些特殊时候,我也不建议使用 sort 所自带的属性,建议根据需要来具体实现 java.util.Comparator 这个接口来具体实现自定义排序。