Странное поведение с Spring Data JPA - PullRequest
0 голосов
/ 09 октября 2018

На самом деле это не вопрос, но, возможно, это ошибка.

У меня есть массив объектов, и я выполняю цикл, чтобы сохранить его в базе данных:

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 или данными весны 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 голосов
/ 09 октября 2018

Так как имя столбца отсутствует 'NaN' Вот почему вы получаете это исключение:

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

Вы можете проверить вот так в своем коде:

for (ThresholdParams p : threshold.getThresholdParams()) {
    if (p !=null) {
            thresholdParamsRepository.save(p);
        }
    }

Это будетпроверьте нулевое значение для вашего домена и будет сохранен, если истина.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...