Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在hibernate条件中使用date()_Java_Mysql_Hibernate - Fatal编程技术网

Java 如何在hibernate条件中使用date()

Java 如何在hibernate条件中使用date(),java,mysql,hibernate,Java,Mysql,Hibernate,我想在hibernate标准中使用Date函数,因为其中一个字段是timestamp 我的sql应该是: "select * from feed where DATE(date) = DATE(NOW()) + INTERVAL 5 DAY" 当我在标准中尝试时: critera.add(Restrictions.eq("DATE(date)", "DATE(NOW()) + INTERVAL 5 DAY")); 我得到: could not resolve property: DATE(d

我想在hibernate标准中使用Date函数,因为其中一个字段是timestamp

我的sql应该是:

"select * from feed where DATE(date) = DATE(NOW()) + INTERVAL 5 DAY"
当我在标准中尝试时:

critera.add(Restrictions.eq("DATE(date)", "DATE(NOW()) + INTERVAL 5 DAY"));
我得到:

could not resolve property: DATE(date) of: com.mycomapany.model.Feed
我有一个按日期命名的字段


有什么问题?我正在使用MySQL,您可能会找到一种方法来实现这一点,但在我看来,这是一种错误的方法

Hibernate的一个主要特性是通过Hibernate方言抽象数据库供应商特定的特性

您正试图直接访问MySQL功能,但是通过与供应商无关的接口,因此您的困难就来了。Hibernate可能支持日期间隔,但不支持-请参阅

因此,选择似乎是:

计算代码中的日期范围,而不是HQL中的日期范围 在SQL而不是HQL中执行需要执行的操作 创建自定义的Hibernate方言,如中所示
你可能会找到一种方法来实现这一点,但在我看来,这是一种错误的方法

Hibernate的一个主要特性是通过Hibernate方言抽象数据库供应商特定的特性

您正试图直接访问MySQL功能,但是通过与供应商无关的接口,因此您的困难就来了。Hibernate可能支持日期间隔,但不支持-请参阅

因此,选择似乎是:

计算代码中的日期范围,而不是HQL中的日期范围 在SQL而不是HQL中执行需要执行的操作 创建自定义的Hibernate方言,如中所示 使用:

公共列表findByDaysFromTodayint daysFromToday{ 返回em.createQuery 从提要f中选择f,其中f.date介于:开始和:结束之间 .setParameterstart, 新本地日期 .今天午夜 .托德, 时间类型日期 .setParameterend, 从今天开始新建LocalDate.plusDaysDays .今天午夜 .今天 .minus millis1 .今天 .托德, 时间类型日期 .getResultList; } 使用:

公共列表findByDaysFromTodayint daysFromToday{ 返回em.createQuery 从提要f中选择f,其中f.date介于:开始和:结束之间 .setParameterstart, 新本地日期 .今天午夜 .托德, 时间类型日期 .setParameterend, 从今天开始新建LocalDate.plusDaysDays .今天午夜 .今天 .minus millis1 .今天 .托德, 时间类型日期 .getResultList; }
最好的解决方案是使用您开始使用的CriteriaAPI

Calendar c = Calendar.getInstance(LOCALIZATION);
//Add 5 Days
c.add(Calendar.DATE, 5);
criteria.add(Expression.ge("dateColumn",c.getTime());

最好的解决方案是使用您开始使用的CriteriaAPI

Calendar c = Calendar.getInstance(LOCALIZATION);
//Add 5 Days
c.add(Calendar.DATE, 5);
criteria.add(Expression.ge("dateColumn",c.getTime());