是否有相当于杰克逊的@JsonAnyGetter/@JsonAnySetter 的 JPA 注释?

Posted

技术标签:

【中文标题】是否有相当于杰克逊的@JsonAnyGetter/@JsonAnySetter 的 JPA 注释?【英文标题】:Is there a JPA annotation equivalent of jackson's @JsonAnyGetter/@JsonAnySetter? 【发布时间】:2019-07-07 18:01:39 【问题描述】:

使用 jackson,我可以使用 @JsonAnyGetter@JsonAnySetterMap<String, Object> 序列化/反序列化为 json 对象的额外字段。是否有一个 JPA 注释可以通过从成员 Map 获取/设置额外的 db 列值来执行类似的操作?

具体来说,我想使用 jooq 的 .fetchInto(Pojo.class) 来水合一个 java 对象。我可以手动使用.fetch(RecordMapper<Record, Pojo>) 通过手动从记录字段中水合Map 成员来获得我想要的结果,但想知道是否有更自动的方法来执行此操作。 Pojo 代码可能如下所示(使用 lombok 的 @Data 使其简洁):

@Data
public class Pojo 
    @Column("field1")
    private int field1;

    @Column("field2")
    private String field2;

    @JsonAnyGetter // works for json serialization,
    @JsonAnySetter // is there an equivalent for JPA?
    private Map<String, Object> extraFields;

【问题讨论】:

由于 JPA 不会“序列化”/“反序列化”,那么答案是否定的 【参考方案1】:

您可以使用您的 jOOQ 配置注册 RecordMapperProvider 以覆盖各种方法,包括 fetchInto(Class) 应用映射的方式: https://www.jooq.org/doc/3.11/manual/sql-execution/fetching/pojos-with-recordmapper-provider/

【讨论】:

对,我仍然需要编写自己的 RecordMapper,但没有一个(或配置 DefaultRecordMapper 的方法)可以完成 DefaultRecordMapper 所做的所有事情,加上“额外" 列到映射类的 Map 中,对吧? 您的记录映射器可以委托给DefaultRecordMapper 并在映射后“修复”事情。

以上是关于是否有相当于杰克逊的@JsonAnyGetter/@JsonAnySetter 的 JPA 注释?的主要内容,如果未能解决你的问题,请参考以下文章

阿帕奇约翰松 VS 杰克逊

强制杰克逊在没有 JsonIgnore 的情况下忽略 isEmpty

是否可以让杰克逊将嵌套对象序列化为字符串

JDK8 java.time 是不是有杰克逊数据类型模块?

杰克逊 2.0 和 Spring 3.1

杰克逊 2.0 和 Spring 3.1