【问题标题】:Hibernate sort by properties of inner bean?Hibernate按内部bean的属性排序?
【发布时间】:2009-12-18 06:11:58
【问题描述】:

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

如何按 properties-of-a-property 对结果进行排序?

谢谢

【问题讨论】:

    标签: java hibernate criteria alias


    【解决方案1】:

    试试这个:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-28
        • 2011-04-06
        • 1970-01-01
        • 1970-01-01
        • 2023-03-05
        相关资源
        最近更新 更多