Java 如何在hibernate条件中使用date()
我想在hibernate标准中使用Date函数,因为其中一个字段是timestamp 我的sql应该是: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
"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());