我正在尝试UUID使用Hibernate将POJO中的列映射到SQL Server表列.
注释应用如下:
@Id
@GeneratedValue
@Column(name = "Id", columnDefinition = "uniqueidentifier")
public UUID getId(){ ... }
Run Code Online (Sandbox Code Playgroud)
但是,似乎Java Hibernate映射和SQL服务器之间存在一些字节序问题.
例如,在我的Java应用程序中,我将id表示为:
4375CF8E-DEF5-43F6-92F3-074D34A4CE35
ADE3DAF8-A62B-4CE2-9D8C-B4E4A54E3DA1
Run Code Online (Sandbox Code Playgroud)
而在SQL Server中,这些表示为:
8ECF7543-F5DE-F643-92F3-074D34A4CE35
F8DAE3AD-2BA6-E24C-9D8C-B4E4A54E3DA1
Run Code Online (Sandbox Code Playgroud)
有没有办法在双方都有相同的代表?
请注意,uniqueidentifier它仅用于uniqueidentifier在SQL Server中具有类型ID而不是类型binary; 当存在同样的问题uniqueidentifier,从注释移除(可观察到该问题通过转换binary是uniqueidentifier).
我正在尝试使用内存数据库编写测试。我写了一个 sql 来清理数据并将数据存储到 DB。但我有一个例外:
Caused by: org.h2.jdbc.JdbcSQLDataException: Hexadecimal string contains non-hex character: "e7485042-b46b-11e9-986a-b74e614de0b0"; SQL statement:
insert into users (user_id, name, created_on, modified_on) values ('e7485042-b46b-11e9-986a-b74e614de0b0', 'Ann', null, null) -- ('e7485042-b46b-11e9-986a-b74e614de0b0', 'Ann', NULL, NULL) [90004-199]
Run Code Online (Sandbox Code Playgroud)
我的sql:
insert into users (user_id, name, created_on, modified_on) values ('e7485042-b46b-11e9-986a-b74e614de0b0', 'Ann', null, null);
insert into product(product_id, name, created_on, modified_on) VALUES ('f3a775de-b46b-11e9-95e4-af440b6044e6', 'product1', '2019-08-01 17:51:51.000000', '2019-08-01 17:51:51.000000');
insert into products_users(user_id, product_id) VALUES ('e7485042-b46b-11e9-986a-b74e614de0b0', 'f3a775de-b46b-11e9-95e4-af440b6044e6');
Run Code Online (Sandbox Code Playgroud)
我的 application.properties:
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
Run Code Online (Sandbox Code Playgroud) 我有一个关于通过休眠持久性(JPA2)以二进制形式在数据库中的字符串uuid的问题。我现在正在使用此代码:
private UUID id;
@Id
@Type(type="uuid-char")
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
@Column(length = 32, unique = true, nullable = false)
public final UUID getId() {
return id;
}
Run Code Online (Sandbox Code Playgroud)
这项工作正常,但我必须以二进制形式存储它。不要问我为什么,但是我必须。