Hibernate标准问题

时间:2010-01-29 22:06:55

标签: java hibernate

我关注POJO: - 公司

  • 节点 (nodeID,公司)

  • 用户 (userID,node)

我想创建where子句(通过Criteria),它将返回给我给定公司的每个用户。有点像...

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

但这不起作用,因此可以使用条件类或应该使用它 HQL / SQL?

提前致谢!

4 个答案:

答案 0 :(得分: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) );

答案 1 :(得分:2)

您使用id ...

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

答案 2 :(得分:2)

Criteria API可以实现您的目标。您的代码有一些错误,但也许它们只是错别字。如果不查看表和hibernate配置,很难分辨出错误是什么。尝试这样的事情:

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

答案 3 :(得分:0)

如果你想保存一些代码,可以在http://github.com/moesio/seimos

使用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