当前位置: 首页 > 面试题库 >

JOOQ如何根据其他列值转换JSON?

薛承志
2023-03-14
问题内容

假设我有一个表 customer(int id,类型varchar,首选项jsonb) 。的 类型
可以是REGULARPREMIUM基于该列类型值偏好JSON结构将是不同的等等。

从数据库加载客户记录时,如果 type = REGULAR, 我想将其转换为RegularCustomerPreferences对象类型,如果
type = PREMIUM, 我想将其转换为PremiumCustomerPreferences对象类型。

我已经看过几本有关使用JOOQ JSON转换器/绑定的教程。但是它们是一对一的映射,不是基于条件的(取决于另一列的值)。

实现此目标的理想方法是什么?


问题答案:

您显然不能以类型安全的方式执行此操作,因为您的preferences列的类型将是Field<RegularCustomerPreferences | PremiumCustomerPreferences>(联合类型),并且Java当前不支持联合类型。因此,也许可以将通用的CustomerPreferences超类型绑定到该列,然后在使用该值的任何地方向下转换该值。

绑定超级类型应该相对容易。您将实现一个Binding<Object, CustomerPreferences>可同时处理RegularCustomerPreferencesPremiumCustomerPreferences值的。具体来说,您的转换器看起来像这样:

public Converter<Object, CustomerPreferences> converter() {
    return new Converter<Object, CustomerPreferences>() {
        @Override
        public CustomerPreferences from(Object t) {
            if (some check here to see if this is a regular customer)
                return new RegularCustomerPreferences(t);
            else
                return new PremiumCustomerPreferences(t);
        }

        @Override
        public Object to(CustomerPreferences u) {
            return MyJSONTools.toJSON(u);
        }

        @Override
        public Class<Object> fromType() {
            return Object.class;
        }

        @Override
        public Class<CustomerPreferences> toType() {
            return CustomerPreferences.class;
        }
    };
}

这里的假设是,您的JSON内容允许您决定JSON文档应具有的类型,并与type列重复,因为当前,从版本3.11和3.12开始,jOOQ不支持读取多个字段的多列数据类型绑定值作为其数据类型转换决策的基础。这是与以下相关的待定功能:https
:
//github.com/jOOQ/jOOQ/issues/6124



 类似资料:
  • 假设我有一个表customer(int id,类型varchar,首选项jsonb)。类型可以是、等。根据列类型值,首选项JSON结构将有所不同。 在从数据库加载客户记录时,如果type=regular我希望将其转换为对象类型,如果type=premium我希望将其转换为对象类型。 我已经阅读了几篇关于使用JOOQ JSON转换器/绑定的教程。但是它们是一对一映射,不是基于条件的(取决于另一个列值

  • 我有一个数据帧(df),看起来像这样: 现在,我的目标是,对于列中的每个,应将列中关联的-值替换为字符串。 到目前为止我做了什么 我偶然发现了,它替换了每个(这不是我要找的),缺少值和,这似乎是我想要的,但不起作用。此外,我尝试了这个: 缺少索引或某种迭代器来访问列中的等效值 我试过这个: 这显然不起作用。 我看了几个问题,但不能基于答案中的建议。布莱克的问题西蒙的问题szli的问题扬·威廉斯·图

  • 假设我有一个名为mytable的表,它看起来像这样: 我希望能够更新所有的记录在p6列添加到39但只为行有不同的p2值。换句话说,结果表应该如下所示: 我将p6行着色为黄色,以显示它不应该移动的地方,因为所有的p2单元格都是灰色的,它们的值是相同的。绿色的p6行应该会增长,因为p2也会增长,所以我把+39加到所有的行上。示例中的最后第13行再次为黄色,因为12行上的p2=13行上的p2。 在Gor

  • 我正在寻找一种解决方案,使用Jackson基于同一POJO中的其他属性值序列化POJO对象属性 如果某个属性值符合某些条件,则应根据要求更改其他属性值 例如,下面是我的JSON对象: 在上述情况下,如果的值符合某些条件,那么我应该能够更改的值 为什么需要这样做: 是一个配置对象 和-是配置设置 在上面的例子中,中有一个是,我需要屏蔽/更改相应的 还要补充一点,在这个例子中,属性是和,但是如果我们找

  • 我有一个表,它有4列()gender具有与每个客户链接的唯一值:、或。 该部门与每种产品(男性或女性)都有独特的价值 我做了一个复杂的过程。首先,使用客户信息将male和其他客户分开(创建了两个表CUST_MALEY和cust_other) 如果CUST_MALEY表中有客户,则使用join,返回men division products行(其中division='men');如果cust_oth

  • 本文向大家介绍根据MySQL中其他两个列的值来匹配列的值,包括了根据MySQL中其他两个列的值来匹配列的值的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 以下是根据ID和MatchID显示FirstName的查询- 这将产生以下输出-