我遇到了一个在Hibernate和MySql中使用UUID的博客。现在的问题是,每当我查看数据库时,ID的格式都是不可读的(二进制16)。如何将UUID存储为可读格式,7feb24af- fc38-44de-bc38-04defc3804fe而不是¡7ôáßEN¹º}ÅÑs
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)
只是使用 @org.hibernate.annotations.Type(type="uuid-char")
@org.hibernate.annotations.Type(type="uuid-char")
数据类型分为三个级别: -Java类型 -Hibernate类型 -数据库特定类型。
hibernate数据类型表示是Java数据类型和数据库类型之间的桥梁,以独立于数据库。
您可以检查此映射。如您java.util.UUID所见,可以将其映射到不同的类型(二进制或char / varchar)。uuid- binary是Hibernate的UUIDBinaryType的关键,默认情况下会获得此类型,它将映射到BINARY您的数据库。
java.util.UUID
uuid- binary
BINARY
如果要在UUID下获取CHAR类型,则应说明以hibernate方式进入hibernate状态UUIDCharType。为此,您可以使用uuid- charkey,并且可以检入@Type批注的JavaDoc :Defines a Hibernate type mapping.。因此,您可以使用注释来解释hibernate模式,它应该使用哪个桥接。
UUIDCharType
uuid- char
Defines a Hibernate type mapping.