3

在我的域模型中,我有以下 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");

休眠给出错误:

引起:org.hibernate.QueryException:无法解析属性:securityPrincipal.status 的: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) 在 org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:31)

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

谢谢

4

2 回答 2

4

试试这个:

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

我没有尝试过,也不确定这是最好的方法,但我认为它应该可以工作。

于 2009-12-18T06:21:48.600 回答
0

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

@OrderBy("id, name, 不管") 私有 SecurityPrincpa 主体 ...

注意 JPA Criteria api 2.0 为集合生成 OUTER JOIN。这意味着如果您在表中没有一对一而是一对多关系,它将获取多个结果:

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

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

于 2014-05-16T05:32:27.597 回答