2010-01-29 125 views
0

我有以下POJO`s: - 公司Hibernate的标准问题

  • 节点 (节点ID,公司)

  • 用户 (用户ID,节点)

我想要创建where子句(通过标准),这将返回给我每个给定公司的用户。喜欢的东西...

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 2010-01-29 22:48:44

2

您使用id ...

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

还应与对象本身的工作。 – kgiannakakis 2010-01-29 22:18:53

+0

它呢?这很酷! – dotjoe 2010-01-29 22:20:27

2

你想要什么是可能的标准API。你的代码有一些错误,但也许他们只是拼写错误。没有查看表和休眠配置,很难分辨错误是什么。尝试是这样的:

Criteria criteria = session.createCriteria(User.class); 
List users = criteria.add(Restrictions.eq("node.company", someCompanyObject)) 
      .list(); 
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