使用JPA将UUID存储为mysql中的字符串

Sun*_*Rao 3 java mysql uuid hibernate spring-data-jpa

我遇到了一个使用UUID和Hibernate和MySql的博客.现在的问题是,每当我查看数据库时,ID都是不可读的格式(binary-16).如何将UUID存储为可读格式,7feb24af-fc38-44de-bc38-04defc3804fe而不是¡7ôáßEN¹º}ÅÑs

我正在使用此代码

@Id
@GeneratedValue( generator = "uuid2" )
@GenericGenerator( name = "uuid2", strategy = "uuid2" )
@Column( name = "id", columnDefinition = "BINARY(16)" )
private UUID id;
Run Code Online (Sandbox Code Playgroud)

结果就是"áaáßEN¹º}ÅÑs.但我希望它作为可读UUID,所以我使用以下代码,但没有帮助我

@Id
@GeneratedValue( generator = "uuid2" )
@GenericGenerator( name = "uuid2", strategy = "uuid2" )
@Column( name = "id", columnDefinition = "CHAR(32)" )
private UUID id;
Run Code Online (Sandbox Code Playgroud)

如何在不更改java类型UUID的情况下将UUID保存为字符串而不是二进制(16)

Iva*_*pov 13

只是用 @org.hibernate.annotations.Type(type="uuid-char")

有三种级别的数据类型:
- Java类型
- Hibernate的类型
- 数据库特定类型.

Hibernate数据类型表示是Java数据类型和数据库类型之间的桥梁,它独立于数据库.

您可以检查此映射.如您java.util.UUID所见,可以映射到不同的类型(二进制或char/varchar).uuid-binary是hibernate的UUIDBinaryType的关键,默认情况下你会得到这个类型,它将被映射到BINARY你的数据库.

如果你想在你的UUID下获得CHAR类型,你应该向hibernate解释你想要他的UUIDCharType.要做到这一点,你可以使用uuid-char密钥,因为你可以检查@Dode注释的JavaDoc : Defines a Hibernate type mapping.. 所以,你使用注释来解释hibernate它应该使用哪个桥.


Arn*_*OIS 9

@Type 注解已被弃用,在 Spring Boot 的最新版本中甚至不存在。

您现在需要使用@JdbcTypeCode

正确的方法如下

@Column(columnDefinition = "VARCHAR(36)")
@JdbcTypeCode(SqlTypes.VARCHAR)
Run Code Online (Sandbox Code Playgroud)