Hibernate按内部bean的属性排序?

时间:2009-12-18 06:11:58

标签: java hibernate criteria alias

在我的域模型中,我有以下Classes.A'UserProfile'有一个'SecurityPrincipal'

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

}

我想得到'UserProfile'对象的排序结果,它适用于简单的属性。喜欢

DetachedCriteria criteria=DetachedCriteria.forClass(UserProfile.class);     

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

但是当我尝试访问内部bean的属性(SecurityPrincipal实例)时,如

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

Hibernate给出错误:

  

引起:   org.hibernate.QueryException:可以   不解决财产:   securityPrincipal.status:   com.bigg.ibmd.usermanagement.model.UserProfile     在   org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:44)     在   org.hibernate.persister.entity.AbstractPropertyMapping.toColumns(AbstractPropertyMapping.java:59)     在   org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:31)

如何按属性属性对结果进行排序?

谢谢

2 个答案:

答案 0 :(得分:4)

试试这个:

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

我没有尝试过,也不确定这是最好的方式,但我认为它应该有效。

答案 1 :(得分:0)

要按多个字段过滤,您应该使用@OrderBy注释。例如:

@OrderBy(“id,name,whatever”) 私人SecurityPrincipa负责人 ...

注意JPA Criteria api 2.0为集合生成OUTER JOIN。这意味着如果表中没有一对一但一对多关系,则会获取多个结果:

@OrderBy(“体重,身高”) 私人收藏userVitalStatsCollection;

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