我真的很困惑,根本无法对错误进行推理。
Integer id = 5;
if (id != null)
{
final var configurationResult = context.select(Configuration.CONFIGURATION)
.from(Configuration.CONFIGURATION)
.where(Configuration.CONFIGURATION.DEVICE_ID.eq(id))
.fetch();
configurationResult.forEach(configuration -> {
final var minTemp = configuration.getValue(Configuration.CONFIGURATION.MINIMUM_TEMPERATURE_THRESHOLD);
System.out.println("MinimumTemp is: " + minTemp);
});
}
异常是最混乱的:
Exception in thread "" java.lang.IllegalArgumentException: Field ("public"."configuration"."minimum_temperature_threshold") is not contained in Row (row (
"public"."configuration"."configuration_id",
"public"."configuration"."minimum_temperature_threshold",
"public"."configuration"."maximum_temperature_threshold",
"public"."configuration"."ideal_temperature",
"public"."configuration"."minimum_ph_threshold",
"public"."configuration"."maximum_ph_threshold",
"public"."configuration"."ideal_ph",
"public"."configuration"."light_on_time",
"public"."configuration"."light_off_time",
"public"."configuration"."update_time",
"public"."configuration"."device_id"
))
如果我打印结果的内容,我会得到以下内容
|configuration |
|(6, 22, 28, 24, 7, 9, 8, 2023-05-15T18:00, 2023...|
所以数据就在那里。
有人可以帮助我了解正在发生的事情并帮助我指引正确的方向吗?
达米安
答案在这一行:
final var configurationResult = context.select()
.from(Configuration.CONFIGURATION)
.where(Configuration.CONFIGURATION.DEVICE_ID.eq(id))
.fetch();
当我选择表格的所有字段时,select() 方法需要为空。
当您将表引用传递给
select()
子句时,您将投影一个嵌套记录。请参阅有关以下内容的手册部分:
SelectField
这就像在本机 PostgreSQL 中一样工作,并提供了嵌套多个
TableRecord
类型的强大方法。
如果您只需要一个列(
CONFIGURATION.MINIMUM_TEMPERATURE_THRESHOLD
),那么只投影它就足够了。
我同意这里的错误信息令人困惑。
Row (row (
是对问题的(非常)微妙的暗示,一点也不明显。我创建了一个问题来解决错误消息:#15085