lemostic 2019-08-22 10:53 采纳率: 50%
浏览 684

Criteria怎么按照级联属性进行排序?

Criteria criteria = session.createCriteria(User.class);

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

List users = criteria.list();

以上查询方法可以按照User中的age属性进行排序,但是现在遇到一个情况,User实体类中,关联了一个Person对象,这种情况下如何根据级联属性进行排序呢?也就是说希望以User类中的Person对象的证件号码(idCard)这个属性进行排序,下面代码会出错:

Criteria criteria = session.createCriteria(User.class);

criteria.addOrder(Order.asc("person.idCard"));

List users = criteria.list();

以上代码最后执行报如下错误信息:

could not resolve property: person.idCard of: com.example.User

难道不能以级联属性进行排序吗?如果不能的话,将person.idCard的排序规则换成person.id就又可以排序,因为person的id是Person实体类对应数据库表的主键,跟踪代码发现恰好主外键关联的属性会加进来。那这样的话,如果对应的类属性不是该类的主键,又该怎么添加排序规则呢?我刚好想在查询User对象时,使用User对应的Person的idCard字段来排序,User对象中又没有idCard这个属性,请教各位这种情况怎么处理呢?

  • 写回答

1条回答 默认 最新

  • 明初啥都能学会 2024-04-12 15:18
    关注

    在Hibernate中,如果需要使用Criteria按照级联属性进行排序,可以通过创建别名(Alias)来实现。在你的情况下,需要按照User类中的Person对象的证件号码(idCard)属性进行排序,可以通过别名将级联属性引入到Criteria查询中,然后再进行排序。

    下面是如何修改你的代码来实现按照级联属性进行排序:

    Criteria criteria = session.createCriteria(User.class);
    
    // 创建别名将级联属性person.idCard引入到Criteria查询中
    criteria.createAlias("person", "p");
    criteria.addOrder(Order.asc("p.idCard"));
    
    List users = criteria.list();
    

    在这段代码中,createAlias("person", "p")将User类中的Person对象引入为别名"p",然后可以通过别名"p"来访问Person对象的属性。接着,通过addOrder(Order.asc("p.idCard"))实现按照Person对象的证件号码(idCard)属性进行升序排序。

    这样,你就可以在查询User对象时,使用User对应的Person的idCard字段来排序了。

    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?