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

使用Hibernate的JPQL类型查询中的时间戳文本

羿经武
2023-03-14
TypedQuery<TestEntity> query = entityManager
.createQuery("select t from TestEntity t where greatest(nvl(t.f1, :nullDate), nvl(t.f2, :nullDate)) between :date1 and :date2")
.setParameter("date1", date1)
.setParameter("date2", date2)
.setParameter("nulllDate", LocalDateTime.of(1970, 1, 1, 0, 0, 0, 1))
select t from TestEntity t where greatest(nvl(t.f1, {ts '1970-01-01 00:00:00:000000001'}), nvl(t.f2, {ts '1970-01-01 00:00:00:000000001'})) between :startChanges and :endChanges
org.hibernate.QueryException: unexpected char: '{' [select t from TestEntity t where greatest(nvl(t.f1, {ts '1970-01-01 00:00:00:000000001'}), nvl(t.f2, {ts '1970-01-01 00:00:00:000000001'})) between :startChanges and :endChanges]

UPD:也许它不在规范中,但是最大的/NVL函数可以通过上面的代码从JPQL正确地传递到SQL。我尝试在函数中包装master/NVL,但仍然不接受文字。

共有1个答案

卞坚成
2023-03-14

我在我的环境中准备了一个测试,这个测试返回结果:

Calendar calendar = Calendar.getInstance();
calendar.setTime(date1);
calendar.set(Calendar.HOUR, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);

date1 = calendar.getTime();

calendar.setTime(date2);
calendar.set(Calendar.HOUR, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);

date2 = calendar.getTime();

TypedQuery<TestEntity> query = entityManager
.createQuery("select t from TestEntity t where greatest(nvl(t.f1, TO_TIMESTAMP('1970-01-01 00:00:00,000000001', 'YYYY-MM-DD HH24:MI:SS,FF9')), nvl(t.f2, TO_TIMESTAMP('1970-01-01 00:00:00,000000001', 'YYYY-MM-DD HH24:MI:SS,FF9')) between :date1 and :date2")
.setParameter("date1", date1)
.setParameter("date2", date2);

我希望这就是你要找的。

编辑:修改查询以添加to_timestamp函数。经@dfche证实,它正在工作

 类似资料:
  • 我有一个从数据库中检索的时间戳值,然后将其与当前时间戳进行比较。我实际上想检索过去两个小时内登录的用户的数据。不幸的是,我面临着这个错误。请帮帮我,伙计们。我会感谢你的。我被困在这个密码里了。我的问题如下。 这就是我的错误。 org.hibernate.hql.ast.查询语法异常:意外令牌: 04行附近1,列128[SELECT ls fromcom.ideacrossing.skild.hbm

  • 从mytable中选择*,其中id='5'和postingdate>='2018-11-06 00:00:00'和postingdate<='2018-11-06 23:59:59'; 在开发中心控制台(或CQLSH)上运行这个查询,会给我相同的结果,而不考虑时区。我在PST和IST中都尝试过,得到了同样的结果。在执行查询之前,Cassandra是在执行PST->UTC还是IST->UTC转换?如

  • 我对…感到困惑。、和的类型。 > 我在Oracle 11g数据库中有两种数据类型。->, 我用Hibernate映射了这个。->, 它可以像映射到和映射到一样? 以及到和到? 那么我应该在Java代码中使用什么类型呢? Oracle DB/Hibernate/Java代码 > 日期/日期/日期或时间戳?? 时间戳/日期/日期还是时间戳? 时间戳/时间戳/日期还是时间戳? 四种情况都有可能?我很困惑

  • 我想查询cassandra timestamp列,例如this hour、last hour、beather。 我在mysql中执行了与昨天数据相同的查询

  • 使用Cassandra 2.28,Drive 3,Sparks2。我在Cassandra中有一个timestamp列,我只需要按日期部分查询它。如果我按日期查询:<代码>。其中(“交易日期=?”,“2012-01-21”:它不会带来任何结果。如果我包括时间部分,它会显示无效日期。我的数据(如我在cqlsh中所读)是:2012-01-21 08:01:00 0000 参数:“2012-01-21”

  • 我有一个dynamodb表,其结构如下 我想在此表上执行两个主要查询。 获取用户的所有条目- 还有其他建议吗?谢谢你。 2014年5月更新这里发布了一些很好的建议。我仍在尝试如何最好地实现这一点,并希望检查以下方法的优缺点。 我担心这可能会造成很多不一致,好像对usertrips或recenttrips的插入失败了等等。