You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hibernate使用jsonb类型时能否自定义调整JSON字段默认排序?

问题原因

你用到的com.vladmihalcea hibernate-types包默认使用独立的ObjectMapper实例完成JSON序列化/反序列化逻辑,没有复用Spring容器中配置的Jackson上下文,因此你加在PersonInfo类上的@JsonPropertyOrder等Jackson注解无法被识别生效。

解决方法

方法1:全局配置复用Spring ObjectMapper(推荐)

直接把Spring Boot自动配置好的ObjectMapper注入到hibernate-types的配置中,所有Jackson注解都会自动生效,不需要额外修改类型定义。
新增Spring配置类如下:

import com.vladmihalcea.hibernate.type.util.Configuration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernatePropertiesCustomizer;
import org.springframework.context.annotation.Bean;

@org.springframework.context.annotation.Configuration
public class HibernateJsonConfig {

    @Bean
    public HibernatePropertiesCustomizer hibernateJsonPropertiesCustomizer(com.fasterxml.jackson.databind.ObjectMapper objectMapper) {
        return hibernateProperties -> {
            // 让hibernate-types复用Spring容器中已配置好的ObjectMapper
            Configuration.getObjectMapperHolder().setObjectMapper(objectMapper);
        };
    }
}

配置完成后,你原有的@JsonPropertyOrder、@JsonSerialize、@JsonFormat注解都会直接生效。

方法2:自定义JSON类型实现局部配置

如果你只需要调整PersonInfo这一个类的序列化规则,可以自定义继承JsonBinaryType的自定义类型,指定支持顺序配置的ObjectMapper:

  1. 编写自定义Json类型类
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.vladmihalcea.hibernate.type.json.JsonBinaryType;

public class CustomJsonBinaryType extends JsonBinaryType {
    public CustomJsonBinaryType() {
        super(new ObjectMapper()
                // 注册JDK8时间类型序列化模块
                .registerModule(new JavaTimeModule())
                // 关闭字母序排序,优先使用@JsonPropertyOrder配置
                .configure(com.fasterxml.jackson.databind.MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, false)
        );
    }
}
  1. 修改Entity上的@TypeDef配置,替换为自定义类型:
@TypeDef(name = "jsonb", typeClass = CustomJsonBinaryType.class)
补充说明

PostgreSQL的jsonb类型为了提升查询性能,采用二进制结构存储,本身不会保留键的插入顺序。如果你需要直接在数据库查询返回JSON字符串时就保留指定顺序,可以把Person类中字段的columnDefinition从jsonb改为json即可。

内容的提问来源于stack exchange,提问作者Сергей Аблаев

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:06:03