在我的域模型中,我有以下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)
如何按属性属性对结果进行排序?
谢谢
答案 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;
为避免重复,使用数据库视图很方便。