我有一個休眠類是這樣的:排序在Hibernate與對象值的集合可能是空
public class UserActivityLog implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private Users users;
private Servers servers;
private Date time;
private String event;
}
我有點UserActivityLog對象的集合,使用Hibernate的排序。這裏是我的休眠標準:
criteria.add(Restrictions.ge(sortField, new Timestamp(startDate.getTime())));
//add one day to the real end date for it to be considered in criteria
Date eDate = getEndDate(endDate);
criteria.add(Restrictions.le(sortField, new Timestamp(eDate.getTime())));
if (searchByUser >= 0) {
criteria.add(Restrictions.eq("users.id", searchByUser));
}
if (searchByHostId >= 0) {
criteria.add(Restrictions.eq("servers.id", searchByHostId));
}
if (!searchByEvent.isEmpty()) {
criteria.add(Restrictions.like("event", searchByEvent, MatchMode.ANYWHERE));
}
if(sortColumn.equals("username")) {
sortColumn = "users.username";
criteria.createAlias("users", "users");
}
else if (sortColumn.equals("hostName")) {
sortColumn = "servers.hostName";
criteria.createAlias("servers", "servers");
}
//specify the sorting oder
if(SortDirection.asc.equals(sortDirection)) {
criteria.addOrder(Order.asc(sortColumn));
} else {
criteria.addOrder(Order.desc(sortColumn));
}
List<Object> allRows = (ArrayList<Object>) criteria.list();
UserActivityLog的servers屬性可以爲null。當集合有一個服務器爲空的對象時,並且如果使用作爲Servers對象屬性的hostName對集合進行排序,那麼排序的集合不包含具有servers = null的對象。是否有任何理由或我做錯了什麼?
更新: 這裏是Hibernate查詢:
select count(*) as y0_ from USER_ACTIVITY_LOG this_ inner join SERVERS servers1_ on this_.HOST_ID=servers1_.ID
where this_.TIME>='2014/9/16' and this_.TIME<='2014/9/25' order by servers1_.HOST_NAME asc
我不這麼認爲,因爲我沒有排序時爲主機ID設置搜索條件。意思是if(searchByHostId> = 0)條件不成立。 – devC 2014-09-24 05:50:34
另外,默認情況下,初始數據加載按時間對收集進行排序。此時,我可以看到空的服務器對象。即使我按另一列排序它在那裏。只有在按主機名排序時,纔會出現問題。 – devC 2014-09-24 05:52:03
恩,這不是那種。排序不會從結果中刪除任何記錄。 – DiogoSantana 2014-09-24 05:52:32