当前位置: 首页 > 知识库问答 >
问题:

QueryDSL和日期差异

松国兴
2023-03-14

我正在尝试使用QueryDSL计算用户年龄和日期差。

QPlayer $ = QPlayer.player;
BooleanBuilder builder = new BooleanBuilder();
builder.and(Expressions.dateOperation(Integer.class, Ops.DateTimeOps.DIFF_YEARS, Expressions.currentDate(), $.birthDate).between(3, 5));
playerRespository.findAll(builder);

但失败时出现此错误

Hibernate: select player0_.user_id as id1_31_, player0_1_.user_birthdate as user_bir2_31_, player0_1_.user_register_date as user_reg3_31_, player0_1_.user_delete_date as user_del4_31_, player0_1_.user_email as user_ema5_31_, player0_1_.user_first_name as user_fir6_31_, player0_1_.user_last_name as user_las7_31_, player0_1_.user_login as user_log8_31_, player0_1_.user_password as user_pas9_31_, player0_1_.user_status as user_st10_31_, player0_.player_description as player_d1_20_, player0_.player_height as player_h2_20_, player0_.player_picture as player_p3_20_, player0_.player_role as player_r4_20_, player0_.player_weight as player_w5_20_ from players player0_ inner join users player0_1_ on player0_.user_id=player0_1_.id where (diff_years(player0_1_.user_birthdate, current_date) between ? and ?) and (lower(player0_1_.user_first_name) like ? escape '!')
2015-07-19 14:22:16,881 [main] ERROR: org.hibernate.engine.jdbc.spi.SqlExceptionHelper - FUNCTION xxx.diff_years does not exist

谢谢

共有1个答案

林哲茂
2023-03-14

不幸的是,Querydsl JPA还不支持diff_years

 类似资料:
  • 我有一个实体,它有一个表示上次活动的日期对象。我想查询一下平均空闲时间。因此在SQL中,类似于: 我试着这样算了一下差别: 我如何以日期/时间差(以秒为单位)来表示这个平均值?

  • 我正在尝试使用QueryDSL计算平均日期差异。 我还尝试了其他方法,例如使用,但它没有返回正确的值。如果我们想要获得以秒为单位的日期差异,我们似乎需要找到一些方法来调用数据库特定的日期/时间差函数,而不仅仅是使用减号。 遗憾的是,在JPQL中计算日期差异似乎是不可能的,所以我想querydsl-jpa在这方面也有限制。因此,我们必须编写一个本机SQL查询,或者找到一些黑客来让QueryDSL生成

  • 我有一张这样的桌子: 如何在QueryDSL中编写一个表达式来查找仍然有效的条目(creationDate validity_Days)?

  • 问题内容: 我有一个PostgreSQL函数来计算日期差: 如果直接减去日期,则会计算出差额。但是在我的情况下,日期在变量as和中存在,这导致了问题。 如何减去变量中包含的日期? 问题答案: 除错 你的函数是做可以做 很多 简单。语法错误的实际原因在这里: 看来您正在尝试转换为,这是毫无意义的,因为您的参数已声明为已经。 这也行不通。我在这里引用手册: 为避免语法歧义,“字符串”类型的语法只能用于

  • 我想用QueryDSL表达以下(Oracle)查询: 即。我想做日期算术。不幸的是,(由返回)不包含任何用于加减法的方法,仅用于比较(如或)。 我找到了,但也没有任何帮助。 是我遗漏了什么,还是QueryDSL不支持日期算术?

  • 目前我正在尝试将日期计算从javascript转换为java,因为我想将它用于Android开发。所以在javascript中,我使用了方法,它将日期转换为自1970年1月1日以来经过的毫秒。在java中,具有相同功能的方法称为。在java和javascript留档中,描述完全相同,但当我插入相同的日期时,我得到了两个完全不同的值。例如: Java代码 Javascript 所以我的问题是: 为什