java - Spring Data JPA 的奇怪行为
问题描述
这实际上不是一个问题,但可能是一个错误。
我有一个对象数组,我执行一个循环以将其保存到数据库中:
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”
我在保存语句中使用了一个断点来调试它,但在第一次保存后它跳过了它。我调试了所有,它执行了所有保存,直到它崩溃时的第 8 天。它没有将更改提交到数据库中。
我已经解决了它删除了具有 nan 值的元素,但我不知道它是否是与 java 或 spring data 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;
}
解决方案
由于没有列名'NaN'
这就是你得到这个异常的原因:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'NaN' in 'field list'
你可以在你的代码中这样检查:
for (ThresholdParams p : threshold.getThresholdParams()) {
if (p !=null) {
thresholdParamsRepository.save(p);
}
}
这将检查您的域的空值,如果为真,将被保存。
我希望这将有所帮助。
推荐阅读
- unity3d - 如何将 386*389 png 图像缩放为 20*20 像素
- postgresql - Postgres全文搜索:如何找到两个或多个关键字的文档?
- typescript - 什么是正确的转译方式?
- discord.py - 如何@会员
- python-3.x - 如何从 Discord.py 中的循环事件发送 DM
- apache-spark - 使用“。”选择结构类型列 在 PySpark 的列名中
- python - 如何从另一个类调用 QMainWindow 组件?
- python - 使用python隐藏谷歌表格中的行
- python - 我的清单是空的,但我不知道为什么?
- python - 强制将 pandas 数据框列强制转换为 int64 类型