2013-08-04 93 views
0

我有兩個班,用戶與以下聯繫通知獲取對象

public class User { 
    private Long id; 
    private List<Notification> notifications; 
} 

public class Notification { 
    private Long id; 
    private Date date; 
} 

我試圖獲取的通知列表它們在特定時間之前發送並屬於特定用戶。我試過用Hibernate的標準來實現:

Criteria criteria = session.createCriteria(User.class).add(Restrictions.eq("id", "123")); 
criteria.createAlias("notifications", "notif"); 
criteria.add(Restrictions.lt("notif.date", calendar.getTime())); 
Collection<Notification> result = criteria.list(); 

的問題是,原來我定義爲類「用戶」,但最終的結果是類「通知」的標準,所以我得到的鑄件例外。

有沒有可能解決這個問題?

回答

0

這是預期的結果。您正在運行的User類查詢的話,輸出會是用戶的集合,而不是通知

public List<Notification> getNotifications(Long id){ 

//Start the transaction 

//do some error handling and transaction rollback 
User user = session.createQuery("from User where id = :id").setParameter("id", id).uniqueParameter(); 

List<Notification> notifications = new ArrayList<Notification>(); 
for (Notification notification : user.getNotifications()){ 
    if (notification.getDate.before(calendar.getTime()){ 
     notifications.add(notification); 
    } 
} 
//commit the transaction 
//close the session 
return notifications; 

}

或做它是使用過濾器的其他方式。你可以找到一個過濾教程here

+0

謝謝,說我想獲取通知。我如何操縱代碼來實現這一目標? – mdoust

+0

已更新答案 –

+0

因此,您在此建議的是使用HQL獲取用戶對象,然後獲取通知列表並根據特定日期過濾列表。它應該可以正常工作,但我想要做的就是明確使用Criteria。它甚至有可能這樣做嗎? – mdoust