通常我将UUID作为字符串存储到数据库中。在Sping Boot 2.x中,我使用@Type(type = "org.hibernate.type.UUIDCharType")
对UUID进行decoreate。在Sping Boot 3.x中,它不再工作。它告诉我Cannot resolve method 'type'
。
我知道雅加达有一些变化,但我不知道这对我来说是否是一个问题。
我的实体:
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.Type;
import java.util.Set;
import java.util.UUID;
@Data
@Entity
@Table(name = "werkstatt")
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class WerkstattEntity {
@Id
@Column(columnDefinition = "VARCHAR(255)")
@Type(type = "org.hibernate.type.UUIDCharType")
private UUID id;
}
我的毕业部:
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'io.projectreactor:reactor-test'
testImplementation 'org.springframework.security:spring-security-test'
// https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt-api
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
// https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt-impl
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5'
// https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt-jackson
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5'
implementation 'org.mapstruct:mapstruct:1.5.5.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'
}
2条答案
按热度按时间sd2nnvve1#
如果你阅读Hibernate 6的迁移指南,你会发现我们不再使用字符串类型的名称来标识类型。这样好多了
但更好的是,您不再需要定制的
@Type
注解来持久化UUID
。所以:原则上会很好。
您甚至可以用途:
如果你想生成
UUID
。但是,请注意,默认情况下,如果数据库具有
UUID
类型,则此Map将Map到该类型的列。如果你真的需要Map到VARCHAR
列,用途:或:
取决于口味。
gywdnpxw2#
我知道雅加达有一些变化,但我不知道这对我来说是否是一个问题。
可能是吧Jakarta Persistence API 3.1现在支持
java.util.UUID
类型(here和这里)。在Maven(
mvn dependency:tree
)中绘制最新版本Spring-Boot(3.0.6
)的依赖关系树,您可以看到它使用org.hibernate.orm:hibernate-core:jar:6.1.7.Final
-这是JPA 3.1的compatible。尝试从
WerkstattEntity
实体中删除@Column(columnDefinition = "VARCHAR(255)")
和@Type(type = "org.hibernate.type.UUIDCharType")
注解。但要谨慎:在Apache Derby数据库上,
java.util.UUID
类型被转换为char(16) for bit data
。