Java Hibernate按内部bean的属性排序?

Java Hibernate按内部bean的属性排序?,java,hibernate,criteria,alias,Java,Hibernate,Criteria,Alias,在我的域模型中,我有以下类:“UserProfile”有一个“SecurityPrincipal” class SecurityPrincipal{ private String loginId; private String password; private Date registeredData; private int status; } class UserProfile { private String name; private String company; pr

在我的域模型中,我有以下类:“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实例)的属性时

Hibernate给出了错误信息:

原因: org.hibernate.QueryException:可以 不解析属性: 安全性原则状态: 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)

如何按属性对结果排序

谢谢

试试这个:

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

我还没有尝试过,也不确定这是最好的方法,但我认为它应该能起作用。

要按多个字段进行筛选,应该使用@OrderBy annotation。例如:

@OrderBy(“id、name、随便什么”) 私人证券委托人

请注意JPA Criteria api 2.0为集合生成外部联接。这意味着,如果表中没有一对一关系,而是一对多关系,则会获取多个结果:

@订购人(“重量、高度”) 私人收藏用户VitalStatsCollection

为了避免重复,可以方便地使用数据库视图

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