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

时间:2018-04-24 14:13:29

标签: java mysql hibernate spring-data-jpa uuid

我遇到了一个使用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;

结果是¡7ááßEN¹º}ÅÑs。但我希望它作为可读的UUID,所以我使用了以下代码,但没有帮助我

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

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

1 个答案:

答案 0 :(得分:11)

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

共有三种级别的数据类型:
-Java类型
-休眠的类型
-特定于数据库的类型。

休眠数据类型表示是Java数据类型与数据库类型之间的桥梁,以独立于数据库。

您可以选中此mappings。 如您所见,java.util.UUID可以映射到不同类型(二进制或char / varchar)。 uuid-binary是休眠的UUIDBinaryType的关键,默认情况下会获得此类型,它将映射到数据库的BINARY

如果要在UUID下获取CHAR类型,则应解释为休眠,以使其需要他的UUIDCharType。为此,您可以使用uuid-char键,并可以在@Type批注的JavaDoc中签入:Defines a Hibernate type mapping.。因此,您可以使用注释来说明休眠模式,它应该使用哪个桥。