代码之家  ›  专栏  ›  技术社区  ›  Shubham Sharma

获取与日期/时间匹配的记录休眠

  •  1
  • Shubham Sharma  · 技术社区  · 8 年前

    我在使用与给定日期时间匹配的hibernate获取数据时遇到问题。

    完成的操作:
    我使用hibernate标准将记录插入数据库,在插入时,我将datetime与记录一起添加,如下所示:

    富。Java语言

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "DATE")
    private Date inputDate;
    

    现在,我从DB中获取前5个时间戳,如下所示:

    FooDaoImpl。Java语言

    @Override
    public List<java.sql.Timestamp> fetchTimeStamps() {
        Criteria criteria = getSession().createCriteria(FooDetails.class);
     criteria.setProjection(
        Projections.distinct(
            Projections.property("inputDate")));
        criteria.addOrder(Order.desc("inputDate"));
        criteria.setMaxResults(5);
        return criteria.list();
    }
    

    然后我将其转换为日期字符串并显示在视图中。现在,当用户选择任何给定的时间戳时,我将所选字符串转换为日期,并输入条件以获取与相同时间戳匹配的记录,如下所示:

    @Override
    public List<FooDetails> getFooDetails(Date date) {
        Criteria criteria = getSession().createCriteria(FooDetails.class);
        criteria.add(Restrictions.eq("inputDate", date);
        return criteria.list();
    }
    

    问题: 当我调用getFooDetails()时,它获取空列表。为什么会这样?我做错了什么?
    日期格式为:“MM dd yy HH:MM:ss”

    1 回复  |  直到 8 年前
        1
  •  0
  •   asolanki    8 年前

    你必须改变这一行

    criteria.add(Restrictions.eq("inputDate", date);
    

    criteria.add(Restrictions.eq("inputDate", java.sql.Timestamp(date.getTime()));
    

    此外,通常应避免在时间戳上进行相等匹配,而应使用大于或小于比较。