2014-09-03 2 views
0

Dans ma base de données, j'ai des publications et chaque publication peut contenir zéro ou plusieurs pages, qui sont stockées dans une autre table. En les sélectionnant, je veux soit obtenir toutes les publications ou seulement celles avec au moins une page. La requête de critères suivants ne fonctionne pas à cause de cette erreur: org.hibernate.QueryException: could not resolve property: pComparer les résultats compter

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(); 

Publication:

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

Page:

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

Pourriez-vous ajouter des définitions de table (ou mise en veille prolongée correspondances)? "[pages] sont stockées dans une autre table" suggère que ce n'est pas une simple requête de table – Deltharis

+0

Terminé, voir modifier. – user1406177

Répondre

1

la suivant vous donnera les publications où les pages n'est pas vide (signifie atleast une page est là pour cette publication):

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