这实际上不是问题,但也许是一个错误。
我有一个对象数组,并执行循环以将其保存到数据库中:
for (ThresholdParams p : threshold.getThresholdParams()) {
if (!p.getInitialValue().isNaN() && !p.getStepValue().isNaN()) {
thresholdParamsRepository.save(p);
}
}
thresholdParamsRepository 是扩展 CrudRepository 的接口。
当数组没有任何无效的NaN值时,它可以正常工作。如果执行调试,每次都会在保存语句中停止。
但是,如果数组的第8个(例如)元素具有NaN值,则它将执行所有for循环,而不会执行if和崩溃,因为mysql异常:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:未知 “字段列表”中的“ NaN”列
我使用断点在保存语句中对其进行调试,但在第一次保存后跳过了它。我调试了所有程序,并执行了所有保存操作,直到崩溃为止。它没有将更改提交到数据库中。
我已经解决了删除带有nan值的元素的问题,但是我不知道这是与Java还是与spring数据jpa有关的错误。
这是ThresholdParams类:
@Entity
@Table(name="threshold_params")
public class ThresholdParams {
@EmbeddedId
private ThresholdParamsId thresholdParamsId;
@Column(name="step_value")
private Float stepValue;
@Column(name="initial_value", nullable= true)
private Float initialValue;
@ManyToOne
@JoinColumn(name="contextSourceId",insertable=false, updatable= false)
private ContextSource contextSource;
@Column(name="is_enabled", columnDefinition="bit default 1")
private boolean isEnabled;
public boolean getIsEnabled() {
return isEnabled;
}
public void setIsEnabled(boolean isEnabled) {
this.isEnabled = isEnabled;
}
@ManyToOne
@JoinColumn(name="thresholdId",insertable=false, updatable= false)
private Threshold threshold;
}
答案 0 :(得分:-1)
由于没有列名ls
,这就是为什么您会收到此异常的原因:
'NaN'
您可以在代码中进行如下检查:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'NaN' in 'field list'
这将检查您域的空值,如果为true,则将保存该值。
我希望这会有所帮助。