【问题标题】:JPA UUID mapping for Oracle ORA-01465: invalid hex numberOracle ORA-01465 的 JPA UUID 映射:无效的十六进制数
【发布时间】:2020-10-27 17:15:07
【问题描述】:

虽然此映射在 MySQL 中用于保存对象:

@Id
private String id;

在 Oracle 上它抛出:ORA-01465: invalid hex number when I am saving my object.

这就是我创建 id 的方式:UUID.randomUUID().toString()

我的应用程序必须同时支持 MySQL 5 和 Oracle 12。所以我只能添加一些 mysql/oracle 特定的适配器/扩展,这些适配器/扩展可以在从一个数据库切换到另一个数据库时轻松关闭。如果这意味着将它们绑定到特定数据库,我无法更改 JPA 实体代码。它必须适用于两个数据库。

在从一个 MySQL 切换到 Oracle 时,我该怎么做才能不破坏应用程序?

【问题讨论】:

  • 看看这对你有没有帮助stackoverflow.com/questions/17985893/…
  • 表定义如何?
  • @Type(type="uuid-binary") 可以在 Oracle 上工作,但不能在 MySQL 上工作?表定义 ID NOT NULL RAW(16 BYTE) 我可以根据需要更改它。 RAW 是从 liquibase 更改日志生成的,该日志在此实体上具有 uuid 作为 id 类型。 它适用于 Mysql。我可以将其更改为 char(36),然后在 Oracle 和 Mysql 中将是相同的,因为 liquibase 在 Mysql 中执行此操作:'id','char(36)','NO','PRI',NULL,''

标签: java mysql oracle jpa


【解决方案1】:

只需从 UUID.randomUUID().toString() 中删除 '-' 例如,

UUID.randomUUID().toString().replaceAll("-","")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2014-12-24
    • 2017-07-30
    相关资源
    最近更新 更多