我有如下表格:
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无法理解您的@JsonProperty
和其他开箱即用的注释。您必须实现自己的记录映射器来支持它们:https://www.jooq.org/doc/latest/manual/sql-execution/fetching/pojos-with-recordmapper-provider/
我使用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;
}
}
给出此SO线程中给出的最后一个示例。 我得到这个错误: 我应该使用jooq会满意的特殊映射器吗? 欢迎任何帮助 编辑: Jooq版本:3.14.3 Postgres:11 dto公司 我也尝试过使用SimpleFlatMapper 但是得到 我正在使用spring boot,以下是我对jackson的依赖: 堆栈跟踪:
问题内容: 情况: 我想用由詹金斯(1.642.4)触发的SonarQube(5.4)分析我的项目。它是使用maven构建的Java项目。 我看到两种触发分析的方法: 发布构建操作“使用maven进行SonarQube分析”,但 已弃用 ,所以我不想使用它 推荐的构建后步骤是“执行SonarQube扫描仪”。 问题: 如果我使用了不赞成使用的Post Build Action,那么声纳项目配置的属
情况: 我想用由Jenkins(1.642.4)触发的SonarQube(5.4)来分析我的项目。这是一个用Maven构建的java项目。 我看到了两种触发分析的方法: null 问题: 如果我使用不推荐使用的Post Build操作,则sonar项目配置的属性将自动从项目POM派生。 如果我使用推荐的构建后步骤,我将收到异常 必须为“Unknown”定义以下强制属性:Sonar.ProjectK
我有一个标准的长领域 但它是在过程中填充的,并且具有随机值。如果我试图通过DAO将其添加到数据库中,则该id不会被autoGenerate sqlite引擎覆盖 如果我这样做类型字段为空,它也不起作用 有一种方法可以将id字段中的任何值强制转换为db中的自动增量值? 我从存储库livedata恢复数据。在视图模型
和标题差不多。我在请求正文中有一个可选对象。但是,如果给定了该对象,则它必须包含几个子属性。 我的OpenAPI组件配置如下所示: 我正在使用express openapi validator来验证这一点。现在,我不明白这是否是express openapi validator包的问题,但可选字段(partner)的必填字段(名称、电话)从未验证过。我可以只提供合作伙伴:{},然后直接插入,或者甚