使用JDBI映射@Json属性

问题描述

根据jdbi文档https://jdbi.org/#_jackson_2,拥有对象模型的json属性似乎很简单,但是我尝试了以下操作,但遇到了许多问题。

DB:列类型为Jsonb的Postgres

class Event {
    private String name;
    @Json
    private EventProperty jsonProperty;
    ...
}

数据源已配置

    @Bean
    public jdbi jdbi(TransactionAwareDataSourceProxy eventStoreTxAwareDataSourceProxy) {
        jdbi jdbi = jdbi.create(eventStoreTxAwareDataSourceProxy);
        jdbi.installPlugin(new PostgresPlugin());
        jdbi.installPlugin(new Jackson2Plugin());
    }

用于插入列表绑定的sql

INSERT INTO event (name,json_property)
VALUES (
        :name,:jsonProperty)

运行要插入的代码时,发生以下错误

org.jdbi.v3.core.statement.UnabletoCreateStatementException: no argument factory for type com.EventProperty [statement:"INSERT INTO event (...]

如果我创建了EventPropertyArgumentFactory并使用Jackson ObjectMapper和writeValueAsstring,则可以将其保存到DB。但是,当通过以下方式从数据库取回它时:

 try (Handle handle = jdbi.open()) {
    EventDao dao = handle.attach(EventDao.class);
    return dao.findByName(name);
}

引发以下错误

java.lang.classCastException: Cannot cast org.postgresql.util.PGobject to com.EventProperty

我以为我需要做的就是声明用@Json注释的字段,DB列必须为json / jsonb类型并安装插件,但似乎不是这种情况?

任何人都可以成功尝试此操作,而无需定义自定义行映射器和参数工厂实现?

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)