rawToHex(sys_guid()) 在内存中使用 oracle 模式的 h2
rawToHex(sys_guid()) usage in h2 in memory with oracle mode
我正在尝试为我的 java 应用程序编写一些测试,我的实体持久性使用 oracle 的 sys_guid() 作为主键。
连接到 oracle 时一切正常,但是当我在内存中使用 H2 进行测试时,以下语句用于将主要 guid 值生成为 char(32) returns 一个更大的字符串 (144).
select rawtohex(sys_guid()) from dual
是否有额外的配置来正确设置 oracle 模式,或者这是一个错误
我正在使用 springboot with spring-data 和 hibernate 来处理数据库通信,这里是生成 guid 的示例方法。
@Repository
public interface TokenRecuperacaoSenhaRepository extends ExtendedSpringRepo<TokenRecuperacaoSenha, String>
{
@Query(value = "select rawtohex(sys_guid()) from dual", nativeQuery = true)
public String genereateToken();
}
连接到 Oracle 时,returns“8E0FFC48082AB39FE0539BD3E10AC537”
While with H2, returns "00660032003300620037003000360065002d0031006400630066002d0034003700620030002d0039003400360066002d006100620065003400320034006400360030006300360038"
我猜所使用的函数存在一些转换问题。
SYS_GUID()
和 RAWTOHEX()
函数都是 non-standard 并且在 Oracle 和 H2 之间不完全兼容。
此不兼容性已在 H2 的 Oracle 兼容模式中修复,因此如果您可以从其当前源构建 H2,您将能够在此兼容模式下使用这些功能。
您可以从 GitHub 获取资源:
https://github.com/h2database/h2database
搭建说明在这里:
https://h2database.com/html/build.html#building
您需要 jar 目标。
不要忘记通过将 ;MODE=Oracle
附加到您的连接 URL 或使用 SET MODE Oracle;
命令来设置兼容模式。
如果您不能使用自己构建的 H2,您需要 H2 的替代方法,该方法将使用类似 SELECT CAST(CAST(UUID() AS BINARY) AS VARCHAR)
的方法
我正在尝试为我的 java 应用程序编写一些测试,我的实体持久性使用 oracle 的 sys_guid() 作为主键。 连接到 oracle 时一切正常,但是当我在内存中使用 H2 进行测试时,以下语句用于将主要 guid 值生成为 char(32) returns 一个更大的字符串 (144).
select rawtohex(sys_guid()) from dual
是否有额外的配置来正确设置 oracle 模式,或者这是一个错误
我正在使用 springboot with spring-data 和 hibernate 来处理数据库通信,这里是生成 guid 的示例方法。
@Repository
public interface TokenRecuperacaoSenhaRepository extends ExtendedSpringRepo<TokenRecuperacaoSenha, String>
{
@Query(value = "select rawtohex(sys_guid()) from dual", nativeQuery = true)
public String genereateToken();
}
连接到 Oracle 时,returns“8E0FFC48082AB39FE0539BD3E10AC537” While with H2, returns "00660032003300620037003000360065002d0031006400630066002d0034003700620030002d0039003400360066002d006100620065003400320034006400360030006300360038"
我猜所使用的函数存在一些转换问题。
SYS_GUID()
和 RAWTOHEX()
函数都是 non-standard 并且在 Oracle 和 H2 之间不完全兼容。
此不兼容性已在 H2 的 Oracle 兼容模式中修复,因此如果您可以从其当前源构建 H2,您将能够在此兼容模式下使用这些功能。
您可以从 GitHub 获取资源: https://github.com/h2database/h2database
搭建说明在这里: https://h2database.com/html/build.html#building
您需要 jar 目标。
不要忘记通过将 ;MODE=Oracle
附加到您的连接 URL 或使用 SET MODE Oracle;
命令来设置兼容模式。
如果您不能使用自己构建的 H2,您需要 H2 的替代方法,该方法将使用类似 SELECT CAST(CAST(UUID() AS BINARY) AS VARCHAR)