2014-09-03 3 views
0

내 데이터베이스에는 발행물이 있으며 각 발행물에는 0 개 이상의 페이지가있을 수 있으며 다른 테이블에 저장되어 있습니다. 그들을 선택할 때, 나는 적어도 하나의 페이지가있는 출판물이나 모든 출판물을 원합니다. 다음 기준 쿼리는이 오류로 인해 작동하지 않습니다 : org.hibernate.QueryException: could not resolve property: p비교 결과 계산

Criteria c = Utils.getSession().createCriteria(Publication.class); 

if(!showEmptyPublications) 
{ 
    ProjectionList pl = Projections.projectionList(); 
    pl.add(Projections.count("pages").as("p")); 
    c.setProjection(pl); 
    c.add(Restrictions.gt("p", 0)); 
} 

c.addOrder(Order.asc("titel")); 
publications = c.list(); 

출판 :

CREATE TABLE IF NOT EXISTS `Publication` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    ... 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=47 ; 

페이지 :

CREATE TABLE IF NOT EXISTS `Page` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `pub_id` int(11) NOT NULL, 
    ... 
    PRIMARY KEY (`id`), 
    KEY `FOREIGN_KEY_DICT` (`pub_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6314 ; 

ALTER TABLE `Page` 
ADD CONSTRAINT `FOREIGN_KEY_PUBLICATION` FOREIGN KEY (`pub_id`) 
REFERENCES `Publication` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; 

Publication.java :

... 
@OneToMany(fetch = FetchType.LAZY, mappedBy = "publication") 
public Set<Page> getPages() 
{ 
    return this.pages; 
} 

public void setPages(Set<Page> pages) 
{ 
    this.pages = pages; 
} 
+0

테이블 정의 (또는 최대 절전 모드 매핑)를 추가 할 수 있습니까? "[페이지가 다른 테이블에 저장되었습니다]는 단순한 테이블 쿼리가 아님을 나타냅니다. – Deltharis

+0

완료, 편집을 참조하십시오. – user1406177

답변

1

을다음은 페이지가 비어 있지 않은 출판물을 제공합니다.

Criteria c = session.createCriteria(Publication.class, "publication"); 
c.createAlias("publication.pages", "page"); 
c.add(Restrictions.isNotEmpty("page")); 
c.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY).list();