gpt4 book ai didi

java - JPA 时间戳比较不起作用

转载 作者:行者123 更新时间:2023-12-01 04:40:54 25 4
gpt4 key购买 nike

我有一个带有两个 Date 字段的持久对象,如下所示

@Temporal(TemporalType.TIMESTAMP)
private Date generated;

@Temporal(TemporalType.TIMESTAMP)
private Date expirationTime;

在对象构造时,expirationTime 根据生成 字段进行初始化

this.expirationTime = new Date(generated.getTime() + ttlMillis);

现在我尝试使用 JPA 查询从数据库中删除所有过期的对象

Query q = em.createQuery("delete from MyObject t where CURRENT_TIMESTAMP > t.expirationTime");
q.executeUpdate();

但是运行一个简单的测试

MyObject o = new MyObject(somePastDate, someTTL);
em.persist(o);
... create the query above
q.executeUpate();

显示没有行被删除。关于我做错了什么有任何线索吗?我正在 HSQLDb 上运行测试并使用 Hibernate 作为我的 JPA 提供程序。

编辑:已解决,但我不确定为什么这个版本应该以不同的方式工作。

Query q = em.createQuery("delete from MyObject t where :now > t.expirationTime");
q.setParameter("now", new Date());
q.executeUpdate();

如果与其他字段比较失败,CURRENT_TIMESTAMP 有什么用?

最佳答案

您没有设置任何参数,查询必须获取命名参数:

Query q = em.createQuery("delete from MyObject t where CURRENT_TIMESTAMP > :expirationTime");
q.setParameter("expirationTime" , yourObject.getExpirationTime());//or your getter
q.executeUpdate();

我添加了一个链接来强制执行主题 here .

检查它是否有效:-)

关于java - JPA 时间戳比较不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16567022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com