2010-01-29 126 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