2010-01-29 7 views
0

je POJO`s suivantes: - Sociétécritères Hibernate question

  • Noeud (nodeID, société)

  • utilisateur (userID, noeud)

I vouloir créer une clause where (via Criteria) qui me retournera chaque utilisateur pour une entreprise donnée. Quelque chose comme ...

Criteria criteria = session.createCriteria(User.class) 
criteria.add(Restrinctions.eq("node.company", someCompanyObject); 

Mais cela ne fonctionne pas, alors il est possible de le faire avec classe critères ou devrait utiliser HQL/SQL?

Merci d'avance!

Répondre

5

Le hibernate documentation dit:

par des associations Navigation à l'aide createCriteria(), vous pouvez spécifier des contraintes sur des entités liées:

List cats = sess.createCriteria(Cat.class) 
    .add(Restrictions.like("name", "F%")) 
    .createCriteria("kittens") 
     .add(Restrictions.like("name", "F%")) 
    .list(); 

Transposé à votre problème :

Criteria criteria = session.createCriteria(User.class) 
    .createCriteria("node") 
    .add(Restrinctions.eq("company", someCompanyObject)); 
+0

Merci à tous pour votre aide et excusez-moi pour les erreurs, mais j'écris un exemple de code manuellement. Je pense que c'est la meilleure solution pour moi! – NikolayGS

2

Vous utilisez l'id ...

Restrinctions.eq("node.company.id", someCompanyObject.id); 
+0

Il devrait également fonctionner avec l'objet lui-même. – kgiannakakis

+0

ça marche? c'est super! – dotjoe

2

Ce que vous voulez est possible avec l'API de critères. Votre code a quelques erreurs, mais ce ne sont peut-être que des fautes de frappe. Il est difficile de dire quelle est l'erreur sans regarder la table et la configuration d'hibernation. Essayez quelque chose comme ceci:

Criteria criteria = session.createCriteria(User.class); 
List users = criteria.add(Restrictions.eq("node.company", someCompanyObject)) 
      .list(); 
0

Et si vous voulez économiser quelques utilisation de code šeimos à http://github.com/moesio/seimos

À titre d'exemple, vous pouvez utiliser des critères comme suit:

Criteria criteria = session.createCriteria(Cat.class); 
criteria.add(Restrictions.like(“description”, “Pap”) 
    .addOrder(Order.asc(“description”); 

Criteria subCriteria = criteria.createCriteria("kind", "kind"); 
subCriteria.add(Restrictions.eq("description", "persa")); 

Criteria anotherSubCriteria = subCriteria.createCriteria("anAssociation","anAssociation"); 
anotherSubCriteria.add(Restrictions.eq("attribute", "anything")); 

criteria.setResultTransformer(new AliasToBeanResultTransformer(Cat.class)); 

criteria.crateAlias(“kind.anAssociation”, “kind_anAssociation”); 

criteria.setProjections(Projections.projectionList() 
    .add(Projections.alias(Projections.property(“id”), “id”)) 
    .add(Projections.alias(Projections.property(“kind.id”, “kind.id”)) 
    .add(Projections.alias(Projections.property(“kind.anAssocation.attribute”, “kind.anAssociation.attribute”)) 

List cats = criteria.list(); 

Mais si vous voulez enregistrer un code, vous pouvez utiliser šeimos et le code juste

Filters filters = new Filters(); 
filters.add(new Filters(“description”, “Pap”) 
    .add(new Filter(“description”)) 
    .add(new Filter("kind.description", "persa")) 
    .add(new Filter("kind.anAssociation.attribute", "anything")); 
List<Cat> cats = dao.find(filters); 

Alors, pensez à utiliser http://github.com/moesio/seimos