【问题标题】:Spring, Hibernate, Delete record older than 5 MinSpring,Hibernate,删除超过 5 分钟的记录
【发布时间】:2021-02-11 04:59:33
【问题描述】:

我有一个名为“otp”的表,我需要删除超过某个时间段的记录,现在假设为 5 分钟。 我将 Spring Framework 与休眠与 MySql 一起使用。我尝试了所有可能的方法,在 DTO 界面中编写了一个“@Query”,尝试了 Spring Data 查询方式,我什至尝试对记录进行“选择”。在代码中运行时,它不会选择任何记录,也不会删除任何早于要求的时间段的记录。当我将“查询”语句复制到 MySQL 工作台中时,它确实可以工作,我只需要将数据库名称放在表名前面即可使其工作。下面是代码的 sn-ps。我删除了“@ Query" 语句并保留 Spring Data 查询。

提前感谢您的帮助。

实体或模型。 '

@Getter
@Setter
@NoArgsConstructor
@Entity
@Table(name = "otp")
public class Otp {
    @Id
    @Column(name="phoneNumber")
    private String phoneNumber;
    @Column(name="otp")
    private String otp;
    @Column(name="createdOn", nullable = false, updatable = false)
    @CreationTimestamp
    private Timestamp createdOn;
}

`

必须删除行的代码。

'

@Repository
public interface OTPdto extends CrudRepository<Otp, String> {

    @Modifying
    @Transactional
    void deleteByCreatedOnLessThan(Object now);

}

'

构建查询日期的代码。

'

Date now = Date.from(Instant.now());
                    Object param = new java.sql.Timestamp(now.getTime());
                    otPdto.deleteByCreatedOnLessThan(param);

'

【问题讨论】:

  • 只是好奇。为什么?

标签: mysql spring hibernate


【解决方案1】:

很难通过提供的信息来判断,但也许我可以提供帮助。 首先,我会确保 CreatedOn 列填写正确的信息。我也会尝试类似deleteByCreatedOnBefore(java.sql.Timestamp time) 而不是deleteByCreatedOnLessThan(Object now)。 java.sql.Timestamp 不是原始时间戳值,因此比较“LessThan”可能不太适用。

【讨论】:

  • 谢谢,我尝试了这个建议,不幸的是没有奏效。这是表中时间戳“2021-02-10 11:42:47”的数据
  • @BKruger 检查通过日期和数据库日期是否在同一时区。否则它不会删除所需的记录,否则上面给出的代码是正确的。
  • bharatpatel - 对于 createdOn 列,我已将 sql 脚本中的类型从时间戳更改为 DateTime,我还将变量形式 TimeStamp 更改为使用 java.util.Date - @Column(name="createdOn ", nullable = false, updatable = false) @CreationTimestamp private Date createdOn = new Date();还没有工作。
【解决方案2】:

我会走另一条路,只清除 otp 字段。看来我需要将电话号码保留在数据库中。将来会使用电话号码删除记录。

【讨论】:

  • 问题是即使我使用了 Autowired,dto 对象在这个阶段仍然为空。
猜你喜欢
  • 2012-06-30
  • 2016-09-19
  • 2013-10-28
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
相关资源
最近更新 更多