Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JPA在mysql中将UUID存储为字符串_Java_Mysql_Hibernate_Spring Data Jpa_Uuid - Fatal编程技术网

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

Java 使用JPA在mysql中将UUID存储为字符串,java,mysql,hibernate,spring-data-jpa,uuid,Java,Mysql,Hibernate,Spring Data Jpa,Uuid,我在博客上看到了一篇关于将UUID与Hibernate和MySql结合使用的文章。现在的问题是,每当我查看数据库时,ID都是不可读的格式(二进制-16)。如何将UUID存储为可读格式,如7feb24af-fc38-44de-bc38-04defc3804fe,而不是“7ßßENº}Ås 我用的是这个代码 @Id @GeneratedValue( generator = "uuid2" ) @GenericGenerator( name = "uuid2", strategy = "uuid2"

我在博客上看到了一篇关于将UUID与Hibernate和MySql结合使用的文章。现在的问题是,每当我查看数据库时,ID都是不可读的格式(二进制-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
@org.hibernate.annotations.Type(Type=“uuid char”)

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

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

你可以检查一下。 如您所见,
java.util.UUID
可以映射到不同的类型(二进制或char/varchar)
uuid binary
是hibernate的UUIBINARYTYPE的关键,默认情况下,您将获得此类型,并且它将映射到数据库的
binary


如果您想在UUID下获取CHAR类型,您应该向hibernate解释您想要他的
UUIDChartType
。要做到这一点,您可以使用
uuid char
键,并且可以签入@Type注释的JavaDoc:
定义一个Hibernate类型映射。
。所以,您可以使用注释来解释hibernate应该使用哪个桥接器。

想想这个。。二进制(16)格式的UUID性能更好。您从控制台或任何GUI工具中获得结果“7”?当您需要实际查看表时,只需使用
BIN_TO_UUID(id)
。“是的,我同意这一点,但是有没有一种方法可以在表中用字符串表示UUID,并在java中将其用作UUID对象?”如果您使用MySQL 5.7+,您可以使用生成的列从二进制id列生成人类可读的UUID->。。或者,如果你没有MySQL 5.7+,请使用基本视图。你能解释一下你的答案吗?@ficuscr我已经添加了解释