gen*_*mer 2 java database hibernate jpa spring-boot
通常我将 UUID\xc2\xb4s 作为字符串存储到数据库中。在 Spring Boot 2.x 中,我曾经用@Type(type = "org.hibernate.type.UUIDCharType"). 不知何故,在 Spring Boot 3.x 中它不再起作用了。它告诉我Cannot resolve method 'type'。
我知道雅加达发生了一些变化,但我不知道这对我来说是否是一个问题。
\n我的实体:
\nimport jakarta.persistence.*;\nimport lombok.AllArgsConstructor;\nimport lombok.Builder;\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\nimport org.hibernate.annotations.Type;\n\nimport java.util.Set;\nimport java.util.UUID;\n\n@Data\n@Entity\n@Table(name = "werkstatt")\n@AllArgsConstructor\n@NoArgsConstructor\n@Builder\npublic class WerkstattEntity {\n\n @Id\n @Column(columnDefinition = "VARCHAR(255)")\n @Type(type = "org.hibernate.type.UUIDCharType")\n private UUID id;\n}\nRun Code Online (Sandbox Code Playgroud)\n我的毕业部门:
\ndependencies {\n implementation 'org.springframework.boot:spring-boot-starter-actuator'\n implementation 'org.springframework.boot:spring-boot-starter-data-jpa'\n implementation 'org.springframework.boot:spring-boot-starter-security'\n implementation 'org.springframework.boot:spring-boot-starter-web'\n implementation 'org.springframework.boot:spring-boot-starter-webflux'\n compileOnly 'org.projectlombok:lombok'\n developmentOnly 'org.springframework.boot:spring-boot-devtools'\n runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'\n annotationProcessor 'org.projectlombok:lombok'\n testImplementation 'org.springframework.boot:spring-boot-starter-test'\n testImplementation 'io.projectreactor:reactor-test'\n testImplementation 'org.springframework.security:spring-security-test'\n \n\n // https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt-api\n implementation 'io.jsonwebtoken:jjwt-api:0.11.5'\n\n // https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt-impl\n runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5'\n\n // https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt-jackson\n runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5'\n\n implementation 'org.mapstruct:mapstruct:1.5.5.Final'\n\n annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'\n\n}\nRun Code Online (Sandbox Code Playgroud)\n
Gav*_*ing 12
如果您阅读 Hibernate 6 的迁移指南,您会发现,我们不再使用字符串类型的名称来标识类型。哪个更好。
但更好的是,您不再需要自定义@Type注释来持久化UUID。所以:
@Id
private UUID id;
Run Code Online (Sandbox Code Playgroud)
原则上可以正常工作。
您甚至可以使用:
@Id @GeneratedValue
private UUID id;
Run Code Online (Sandbox Code Playgroud)
如果你想UUID生成。
但请注意,默认情况下,UUID如果数据库具有此类类型,则这会映射到该类型的列。如果您确实需要映射到VARCHAR列,请使用:
@Id @GeneratedValue
@JdbcTypeCode(Types.VARCHAR)
private UUID id;
Run Code Online (Sandbox Code Playgroud)
或者:
@Id @GeneratedValue
@JdbcType(VarcharJdbcType.class)
private UUID id;
Run Code Online (Sandbox Code Playgroud)
取决于口味。
| 归档时间: |
|
| 查看次数: |
3378 次 |
| 最近记录: |