NikolayGS
NikolayGS

Reputation: 290

Hibernate criteria question

I have following POJO`s: - Company

I want to create where clause(via Criteria) which will return to me every user for given company. Something like ...

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

But this is not working, so is it possible to do this with criteria class or should use HQL/SQL?

Thanks in advance!

Upvotes: 0

Views: 687

Answers (4)

Moesio
Moesio

Reputation: 3178

And if you want save some code use Seimos at http://github.com/moesio/seimos

As an example, you can use criteria as follows:

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

But if you want save some code, you can use Seimos and code just

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

So, consider use http://github.com/moesio/seimos

Upvotes: 0

tangens
tangens

Reputation: 39733

The hibernate documentation says:

By navigating associations using createCriteria() you can specify constraints upon related entities:

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

Transposed to your problem:

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

Upvotes: 5

kgiannakakis
kgiannakakis

Reputation: 104168

What you want is possible with Criteria API. Your code has some errors, but perhaps they are just typos. It is hard to tell what the error is without looking at the table and the hibernate configuration. Try something like this:

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

Upvotes: 2

dotjoe
dotjoe

Reputation: 26940

You use the id...

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

Upvotes: 2

Related Questions