2011-05-07 5 views
0

I는 다음과 같이 최대 절전 모드에서 수업을 :최대 절전 모드 기준, 최신 이벤트에 따라 선택 순서는

@Entity 
class Order{ 
    private MyPattern pat; 
    @Id 
    private int id; 
    @OneToMany(cascade = CascadeType.ALL) 
    @JoinColumn(name = "order_id") 
    private List<Event> events; 
    public DetachedCriteria getCriteria() { 
    //here I create criterias 
    } 
} 
@Entity 
class Event{ 
    @Column 
    @Temporal(value = javax.persistence.TemporalType.DATE) 
    private Date date; 
    @Id 
    private int id; 
    @Column 
    private String name; 
} 

는 내가 필요하면 (세부 구조는 중요하지 않습니다) MyPattern에서 주문에 DetachedCriteria를 만드는 것입니다. 이 부분적으로 구현되어 있지만 내 문제는 패턴 하나처럼 최신 event.name있는 Orders 만 선택하는 것입니다. 아마 nevest date로 행을 선택하는 것이 도움이 될 것 같아요. 그러나 나는 그저 Criteria에서 이것을 수행하는 방법을 알지 못합니다. 그래서 나는 해결책과 도움에 대해 열려 있습니다. 감사합니다

편집 : 나는 주문입니다. 정확한 주문 인스턴스 (패턴의 내용에 따라)로 응답해야합니다. 예 : 이미 배송 된 주문 만 요청하는 클라이언트. 따라서 이름이 "선적 된"최신 이벤트가있는 주문을 선택해야합니다.

DetachedCriteria dc=DetachedCriteria.forClass(Order.class,"or").CreateAlias("events","eve"); 
dc.add(Restriction.eq("eve.name","Shipped")); 
orders=dc.getExecutableCriteria(session).list(); 

이 코드는 트릭을해야하지만 큰 결함이 있습니다. Order의 모든 이벤트가 List에 포함되어 있기 때문에 "Delivered"인 주문도 반환합니다. 그래서 같은 어쩌면 간단한 수정은 "배송 event.name =이 있지만 NOT event.name =이 배달되는 주문을 선택합니다.

답변

0

가져 오기 결과를 날짜순으로 이벤트 이름 패턴 &에 따라. Event_ & Order_ 이벤트 & 주문 엔티티의 메타 모델 클래스입니다 . 답장을 보내

CriteriaQuery<Order> cq = cb.createQuery(Order.class); 
Root<Order> order = cq.from(Order.class); 
Join<Order, Event> event = cq.join(Order_.events); 
cq.select(order); 
cq.where(cb.like(event.get(Event_.name)), "*somePattern"); // pattern for results 
cq.orderBy(cb.asc(event.get(Event_.date)); 
+0

감사합니다,하지만 당신은 당신의 코드를 댓글을 달 수 있습니다 내가 최대 절전 모드와 넷빈즈도 이러한 종류의 코드처럼 해달라고에서 처음으로 루트 의 정의를 참조하십시오 : -/나는 또한 함께 질문을 수정하기 위하여려고하고있다 예를 들어 내가 무엇을 찾고 있는지 명확하게 알 수 있습니다. – Seth

+0

@Seth - http://docs.jboss.org/hibernate/stable/entitymanager/refere nce/en/html/querycriteria.html & 당신은 "이런 종류의 코드가 없다"고 정교 할 수 있습니까? –

관련 문제