2010-01-29 2 views
0

У меня есть следующие POJO`s: - Компаниякритерии Hibernate вопрос

  • Узел (NodeId компания)

  • Пользователь (идентификатор пользователя, узел)

I хотите создать где предложение (через критерии), которое вернет мне каждый пользователь для данной компании. Что-то вроде ...

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

Но это не работает, так что это можно сделать с помощью класса критериев или должны использовать HQL/SQL?

Заранее благодарен!

ответ

5

hibernate documentation говорит:

По плавающим ассоциаций с использованием createCriteria() вы можете указать ограничения на зависимые организации:

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

Транспозиция к вашей проблеме :

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

Спасибо всем за помощь и извините за ошибки, но я пишу пример кода вручную. Я думаю, что это лучший вариант для меня! – NikolayGS

2

используется идентификатор ...

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

Он должен также работать с самим объектом. – kgiannakakis

+0

есть? это круто! – dotjoe

2

То, что вы хотите, можно с Criteria API. У вашего кода есть некоторые ошибки, но, возможно, они просто опечатки. Трудно сказать, что такое ошибка, не глядя на таблицу и конфигурацию спящего режима. Попробуйте что-то вроде этого:

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

И если вы хотите сохранить некоторые используют код šeimos на http://github.com/moesio/seimos

В качестве примера, можно использовать критерии следующим образом:

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

Но если вы хотите сохранить некоторый код, вы можете использовать šeimos и код просто

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

Итак, рассмотрим использовать http://github.com/moesio/seimos

Смежные вопросы