如何在写入Azure Document DB时忽略MultiMap类的成员字段
问题核心原因:@JsonIgnore是Jackson的JSON序列化注解,仅控制JSON和Java对象的转换逻辑,完全不影响ORM持久层框架的数据库映射规则,所以拦截不了字段入库。
可根据你使用的持久层框架选择对应方案即可:
- 如果使用JPA/Hibernate
在字段或者对应的getter方法上加@Transient注解,框架会直接将该字段标记为非数据库映射字段,增删改操作都会完全忽略该字段,不会生成对应的SQL写入逻辑。
你的代码可以直接修改为:
@Transient public Multimap<String, String> getmultiMapField() { return multiMapField; }
如果使用MyBatis
手动修改对应Mapper XML的插入、更新语句,直接移除该字段的写入逻辑,同时删除resultMap中该字段的映射配置即可。如果使用MyBatis-Plus
在字段上加@TableField(exist = false)注解,标识该字段不属于数据库表字段,框架会自动忽略该字段的读写操作。如果使用MongoDB等文档型数据库
在字段上加Spring Data MongoDB提供的@Transient注解,即可让该字段不会写入文档。
以上方案均不生效的情况下,可以在调用入库方法前手动将multiMapField字段赋值为null,再配合持久层框架的忽略null值写入规则:
- JPA配置:
spring.jpa.properties.hibernate.update_nullable=false,全局更新时忽略null值字段 - MyBatis-Plus配置:
mybatis-plus.global-config.db-config.update-strategy=not_null,仅更新非null值的字段
内容的提问来源于stack exchange,提问作者sar
相关产品推荐
相关产品推荐

