Вопрос о критериях гибернации - PullRequest
0 голосов
/ 30 января 2010

У меня есть следующие POJO's: - Компания

  • Node (nodeID, компания)

  • Пользователь (ИД пользователя, узел)

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

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

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

Заранее спасибо!

Ответы [ 4 ]

5 голосов
/ 30 января 2010

Документация в спящем режиме гласит:

Путем навигации по ассоциациям с помощью 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) );
2 голосов
/ 30 января 2010

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

Criteria criteria = session.createCriteria(User.class);
List users = criteria.add(Restrictions.eq("node.company", someCompanyObject))
            .list();
2 голосов
/ 30 января 2010

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

Restrinctions.eq("node.company.id", someCompanyObject.id);
0 голосов
/ 08 августа 2012

А если вы хотите сохранить код, используйте Seimos на 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();

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...