Spring Data JPA的奇怪行为

时间:2018-10-09 12:16:12

标签: 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”列

我使用断点在保存语句中对其进行调试,但在第一次保存后跳过了它。我调试了所有程序,并执行了所有保存操作,直到崩溃为止。它没有将更改提交到数据库中。

我已经解决了删除带有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;

}

1 个答案:

答案 0 :(得分:-1)

由于没有列名ls,这就是为什么您会收到此异常的原因:

'NaN'

您可以在代码中进行如下检查:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'NaN' in 'field list'

这将检查您域的空值,如果为true,则将保存该值。

我希望这会有所帮助。