【问题标题】:Portable default to current datetime with JPA使用 JPA 可移植默认为当前日期时间
【发布时间】:2021-07-08 08:37:09
【问题描述】:

我为我的专栏撰稿

class MyEntity {

    @Column(columnDefinition="DATETIME(6) DEFAULT CURRENT_TIMESTAMP")
    private LocalDateTime createdDate = LocalDateTime.now(ZoneOffset.UTC);

它在MySQL 中有效,但在我用于自动化测试的H2 中失败。

是否可以使用可移植的JPA 的默认日期时间服务器端?

【问题讨论】:

  • 我猜你让 JPA 处理模式创建/更新。您真的需要 SQL 级别的列默认值 - 即 JPA 之外的东西会在该表中插入数据吗? JPA 也可以在 @PrePersist 钩子上创建日期。
  • @NikosParaskevopoulos 是的,我需要非 JPA 代码才能写入表

标签: mysql jpa mariadb h2 current-time


【解决方案1】:

通过避开“测试数据库”H2来避免问题

我通常建议使用 testcontainers 而不是 H2 来测试您的代码,以避免任何纯粹由翻译引起的问题,

使用代理翻译你的 SQL

如果由于某种原因您需要多 RDBMS 支持(可能不仅仅是 H2),您可以在生成架构或运行 JPA 原生 SQL 查询时将 jOOQ 的 ParsingConnectionDataSource 挂在中间以确保(大多数) MySQL 特定的东西也适用于 H2。

I've written a blog post on the jOOQ blog to explain how this could work.

【讨论】:

  • 我正在使用它,它正在使用 H2 :)
  • 哦,您使用的是 jOOQ 的JPADatabase?哈,但你没有在你的问题中提到这一点!如果这不起作用,它可能是一个错误,虽然我无法重现问题......
  • 不,我正在使用 QuarkusQuarkus 正在使用 testcontainers,它正在使用 H2... 在 Jack 建造的房子里:D
猜你喜欢
  • 2017-01-01
  • 1970-01-01
  • 2020-04-03
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-08
相关资源
最近更新 更多