gpt4 book ai didi

java - JOOQ 中不会自动转换内部属性

转载 作者:行者123 更新时间:2023-12-02 09:24:54 25 4
gpt4 key购买 nike

我有如下表格:

    CREATE TABLE recipes
(
id INT AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
components JSON,
active BOOLEAN NULL DEFAULT TRUE,

PRIMARY KEY (id),
UNIQUE KEY (name)
)
CHARACTER SET "UTF8"
ENGINE = InnoDb;

我创建了如下所示的 pojo 类:

@JsonIgnoreProperties(ignoreUnknown = true)
public class CValueRecipeV2
{
@JsonProperty("components")
@JsonAlias("matcher.components")
@Column(name = "components")
@Valid
private List<CComponentV2> mComponents;

@JsonProperty("name")
@Column(name = "name")
private String name;

public List<CComponentV2> getComponents()
{
return mComponents;
}

public void setComponents(List<CComponentV2> mComponents)
{
this.mComponents = mComponents;
}
public String getName()
{
return mName;
}

public void setName(String mName)
{
this.mName = mName;
}

}

另一个类

@JsonIgnoreProperties(ignoreUnknown = true)
public class CComponentV2
{
@JsonProperty("shingle_size")
@JsonAlias("shingleSize")
@CShingleField
private Integer mShingleSize;

public Integer getmShingleSize()
{
return mShingleSize;
}

public void setmShingleSize(Integer mShingleSize)
{
this.mShingleSize = mShingleSize;
}
}

现在我尝试使用 JOOQ 从数据库中获取记录。但我无法将 json 组件字符串转换为组件类。

我正在读取下表中的数据,如下所示:

context.dsl().select(RECIPES.asterisk())
.from(RECIPES)
.where(RECIPES.NAME.eq(name))
.fetchInto(CValueRecipeV2.class);

在数据库中,我有以下记录。

ID name components           active
1 a [{"shingle_size=2"}] true

在获取数据时,我收到以下错误

Caused by: org.jooq.exception.DataTypeException: Cannot convert from {shingle_size=2} (class java.util.HashMap) to class com.ac.config_objects.CComponentV2

我是 JOOQ 的新手。如果我遗漏了什么,请告诉我。提前致谢。

最佳答案

我已经使用 jooq 转换器解决了我的问题。

var record = context.dsl().select(RECIPES.asterisk())
.from(RECIPES)
.where(RECIPES.NAME.eq(name))
.fetchOne();

record.setValue(RECIPES.COMPONENTS, record.get(RECIPES.COMPONENTS, new CComponentV2Converter()));
var recipe = record.into(CValueRecipeV2.class);

我的转换器如下所示:

public class CComponentV2Converter implements Converter<Object, List<CComponentV2>>
{
static final long serialVersionUID = 0;

@Override
public List<CComponentV2> from(Object databaseObject)
{
var componentList = CObjectCaster.toMapList(databaseObject);
List<CComponentV2> cComponentV2s = new ArrayList<>();
componentList.forEach(e -> {
CComponentV2 cComponentV2 = new CComponentV2();
cComponentV2.setmShingleSize(CObjectCaster.toInteger(e.get("shingle_size")));
cComponentV2s.add(cComponentV2);
});
return cComponentV2s;
}
}

关于java - JOOQ 中不会自动转换内部属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58400058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com