2009-12-18 160 views
3

在我的域模型我有以下Classes.A「用戶配置」有一個「SecurityPrincipal」Hibernate按內部bean的屬性排序?

class SecurityPrincipal{ 
private String loginId; 
private String password; 
private Date registeredData; 
private int status; 
} 



class UserProfile { 

private String name; 
private String company; 
private SecurityPrincipa principal 

} 

我想獲得「用戶配置」對象的排序結果,並進行簡單的properties.Like

工作正常
DetachedCriteria criteria=DetachedCriteria.forClass(UserProfile.class);  

criteria.addOrder(Order.asc("name"); 

但是,當我嘗試像

criteria.addOrder(Order.asc("principal.status"); 

Hibernate來訪問內部bean(SecurityPrincipal實例)的特性使錯誤:

Caused by: org.hibernate.QueryException: could not resolve property: securityPrincipal.status of: com.bigg.ibmd.usermanagement.model.UserProfile at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:44) at org.hibernate.persister.entity.AbstractPropertyMapping.toColumns(AbstractPropertyMapping.java:59) at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:31)

如何通過屬性屬性對結果進行排序?

感謝

回答

4

試試這個:

DetachedCriteria criteria=DetachedCriteria.forClass(UserProfile.class);   
criteria.createAlias("principal", "p"); 
criteria.addOrder(Order.asc("p.name")); 

我還沒有嘗試過,我也不是確保它的最好的方式,但我認爲它應該工作。

0

對於多個字段進行過濾,您應該使用@OrderBy註釋。例如:

@OrderBy( 「ID,姓名,無所謂」) 私人SecurityPrincipa主要 ...

注重JPA標準API 2.0生成OUTER JOIN的集合。這意味着如果您在表格中沒有一對一但一對多的關係,它將獲取多個結果:

@OrderBy(「weight,height」) private Collection userVitalStatsCollection;

爲避免重複,使用數據庫視圖很方便。