-
在 Hibernate 6.x 中支持 JSON 类型字段的实体映射
- 2023-05-25 00:30
-
字数 236
- 阅读 1,023
在 Hibernate 6.x 中,可以使用 @Type(JsonType.class) 直接将字段映射为 JsonType 类型,而不再需要使用 @Type(type = "json") 来指定 Hibernate 5.x 中提供的 JSON 类型。JsonType 类是 Hibernate 6.x 提供的内置类型之一,在处理 JSON 类型字段时非常方便。因此,建议尽可能使用 @Type(JsonType.class) 来映射 JSON 类型的字段,以获得更好的性能和灵活性。
首先引入 hibernate-types-60 依赖库:
dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'com.alibaba.fastjson2:fastjson2:2.0.32' implementation 'com.vladmihalcea:hibernate-types-60:2.21.1' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.mysql:mysql-connector-j' annotationProcessor 'org.projectlombok:lombok' }
然后编写实体类如下:
import com.alibaba.fastjson2.JSONObject; import com.fasterxml.jackson.annotation.JsonFormat; import com.vladmihalcea.hibernate.type.json.JsonType; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Table; import lombok.Data; import org.hibernate.annotations.Type; import java.time.LocalDateTime; @Data @Entity @Table(name = "message") public class Message { /** * 消息主键 */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; /** * 消息接收方 */ @Column(name = "recipient") private String recipient; /** * 消息内容 */ @Type(JsonType.class) @Column(name = "content", columnDefinition = "json") private JSONObject content; /** * 创建时间 */ @Column(name = "create_time") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime createTime; }