是否有相当于杰克逊的@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
和 @JsonAnySetter
将 Map<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 注释?的主要内容,如果未能解决你的问题,请参考以下文章