java - 标准 ORDER BY 日期不起作用?

标签 java hibernate hibernate-criteria

你能帮我解决这个问题吗?我正在尝试按日期对条件查询的结果进行排序,但没有得到我需要的结果。我以字符串格式保存日期,如何使用条件按日期排序

我使用的代码是:

@Override
public List<Program> getListProgram() {
    Session session=sessionFactory.openSession();
    Criteria criteria=session.createCriteria(Program.class);
    criteria.addOrder(Order.asc("createdDate"));
    List<Program> programs=(List<Program>)criteria.list();
    return programs;
}

结果是:

01/02/2009
03/01/2009
04/06/2009
05/03/2009
06/12/2008
07/02/2009

结果应该是:

06/12/2008
03/01/2009
01/02/2009
07/02/2009

我需要按照上面的格式选择日期。

非常感谢您的帮助。

最佳答案

在条件上执行 list 方法之前,您必须调用 criteria.addOrder(Order.asc("createdDate"));

@Override
public List<Program> getListProgram() {
    Session session=sessionFactory.openSession();
    Criteria criteria=session.createCriteria(Program.class);
    criteria.addOrder(Order.asc("createdDate"));
    List<Program> programs=(List<Program>)criteria.list();
    return programs;
}

编辑

在你的情况下,如果你想按字符串日期排序,正如我在评论中提到的那样,这个答案不是你能得到的正确答案(可能将 creationDate 转换为 Date 类型是最好的!当然)。

你可以试试这样的代码:

static final String DF = "DD/MM/YYYY";
static final SimpleDateFormat SDF = new SimpleDateFormat(DF);

@Override
public List<Program> getListProgram() {
    Session session=sessionFactory.openSession();
    Criteria criteria=session.createCriteria(Program.class);
    List<Program> =(List<Program>)criteria.list();
    boolean asc = true;
    programs.sort((a, b) -> {
        int comparison = 0;
        try {
            comparison = SDF.parse(a.getCreatedDate()).compareTo(SDF.parse(b.getCreatedDate()));
        } catch (ParseException e) {
            // handle it!!
        }
        return asc ? comparison : (0-comparison);
    });
    return programs;
}

编辑 2

如果您想避免使用 lambda,请尝试改用它:

Collections.sort(programs, new Comparator<Main>() {
        @Override
        public int compare(Program a, Program b) {
            int comparison = 0;
        try {
            comparison = SDF.parse(a.getCreatedDate()).compareTo(SDF.parse(b.getCreatedDate()));
        } catch (ParseException e) {
            // handle it!!
        }
        return asc ? comparison : (0-comparison);
        }
    });

关于java - 标准 ORDER BY 日期不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40589363/

相关文章:

java - 如何获取jar执行过程中使用的内存空间

java - 在java中使用hibernate将列表类型转换为字符串

java - 如何使用 CriteriaQuery 查询 OneToOne 实体的特定值

java - Criteria API 和独特的结果

java - java更新语句错误(SQL错误或缺少数据库(near "credits": syntax error))

java - startActivityForResult() 之后检索联系人姓名和电话

java - Jackson 映射到 POJO 无法反序列化实例实例

java - Apache tomcat 6 问题

java - JPA 标准生成仅包含一个问题点的查询

unit-testing - Grails 中的 Hibernate 标准查询可以进行单元测试吗?