2013-08-04 2 views
0

나는 두 개의 클래스, 사용자 및 다음 협회와 알림이 : 나는 통지의 목록을 가져 오기 위해 노력하고있어가져 오기 객체

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

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

을 특정 시간 전에 전송되어 특정 사용자에게 속합니다. 나는 최대 절전 모드 기준으로 이러한 목표를 달성하기 위해 시도했다 :

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

예상되는 결과입니다. 당신은 정말, 출력이 사용자의 수집 및하지 통지

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; 

}

하거나 필터를 사용하는 것입니다 수행하는 다른 방법이 될 것이다 User 클래스에 쿼리를 실행하고 있습니다. 필터에 대한 자습서를 찾을 수 있습니다. here

+0

감사합니다. 알림을 가져오고 싶습니다. 어떻게 이것을 달성하기 위해 코드를 조작 할 수 있습니까? – mdoust

+0

답변이 –

+0

업데이트되었습니다. HQL을 사용하여 사용자 개체를 가져 와서 알림 목록을 가져 와서 특정 날짜에 대해 목록을 필터링하는 것이 좋습니다. 그것은 잘 작동해야하지만 내가하고 싶은 것은 명시 적으로 기준입니다. 그렇게 할 수 있습니까? – mdoust