【问题标题】:Hibernate query to select rows within a time range of a Datetime column休眠查询以选择日期时间列的时间范围内的行
【发布时间】:2014-09-15 13:54:02
【问题描述】:

我有一个表DeviceData,其中列Username, Watts, and CreatedOn,其中CreatedOn 的类型为Datetime (yyyy-MM-dd HH:mm:ss)。所有三列构成一个复合键,并且是 Hibernate 中的一个 @Embeddable 类。

@Embeddable
public class TimeSeriesPowerPK implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private String username;
    private Integer watts;
    private String dateTime;

    public TimeSeriesPowerPK(String username, Integer watts, String dateTime) {
        this.username = username;
        this.watts = watts;
        this.dateTime = dateTime;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getWatts() {
        return watts;
    }

    public void setWatts(Integer watts) {
        this.watts = watts;
    }

    public String getDateTime() {
        return dateTime;
    }

    public void setDateTime(String dateTime) {
        this.dateTime = dateTime;
    }

}

我应该如何在如下所示的 DAO 中编写查询,以检索 createdOn 介于当前时间和用户输入的小时数或分钟数之间的行的所有瓦特值?

public List<Integer> getPowerUsageForUser(String minutes) {
    List<Integer> powerUsedList = sessionFactory.getCurrentSession().createQuery("***query***").list();
    return powerUsedList;
}

非常感谢任何帮助!提前致谢!

编辑:更新问题以检索所有选定行的特定列的值。

【问题讨论】:

    标签: java mysql sql hibernate jpa


    【解决方案1】:

    使用以下代码

    public List<TimeSeriesPowerPK> getPowerUsageForUser(String minutes) {
    Query query = sessionFactory.getCurrentSession().createQuery("From TimeSeriesPowerPK where dateTime <=:param1 AND dateTime >= :parma2 ");
    query.setParameter("param1",currentDateObject);
    query.setParameter("param2",userEnteredDateObject);
    List<TimeSeriesPowerPK> powerUsedList=query.list();
    return powerUsedList;
    

    }

    请注意,该类的 dateTime 必须映射到数据库表的 createdOn 列。 希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      您可以使用标准

      public List<TimeSeriesPowerPK> getPowerUsageForUser() {
      
              Criteria powerCriteria= session.createCriteria(TimeSeriesPowerPK.class);
              powerCriteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
      
              powerCriteria.add(Restrictions.le("dateTime",currentDateObject));
              powerCriteria.add(Restrictions.ge("dateTime",userEnteredDateObject));
      
              return powerCriteria.list();
          }
      

      【讨论】:

        【解决方案3】:

        试试这个

        Query qrFetch=ursession.createQuery("from TimeSeriesPowerPK where dateTime between :start_date and :end_date");
        qrFetch.setParameter("start_date",currentDateObject);
        qrFetch.setParameter("end_date",userEnteredDateObject);
        List<TimeSeriesPowerPK> timeSeriesPowerPKList=qrFetch.list();
        

        【讨论】:

          猜你喜欢
          • 2019-05-26
          • 2017-04-29
          • 1970-01-01
          • 1970-01-01
          • 2018-03-03
          • 2019-04-28
          • 2012-04-12
          • 1970-01-01
          • 2013-10-05
          相关资源
          最近更新 更多