2009-12-18 51 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;

为避免重复,使用数据库视图很方便。