Spring Boot JPA .save () обновляет все записи - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть объектный класс Alert, когда я создаю новый ALert и сохраняю его, он заменяет все строки соответствующими параметрами, а чтение и приоритет могут дублироваться в объекте Alert.Ниже приведен код для Alert.class.В чем проблема?

package com.github.entity;

import javax.persistence.*;
import java.util.UUID;

@Entity
public class Alert {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(columnDefinition = "serial")
    private int u_id;
    @Embedded
    @ManyToOne(targetEntity = Reading.class)
    @JoinColumn(name = "vin")
    private Reading reading;
    private String priority;
    private UUID uuid;

    public Reading getReading() {
        return reading;
    }

    public void setReading(Reading reading) {
        this.reading = reading;
    }


    public UUID getUuid() {
        return uuid;
    }

    public void setUuid(UUID uuid) {
        this.uuid = uuid;
    }

    public String getPriority() {
        return priority;
    }

    public void setPriority(String priority) {
        this.priority = priority;
    }

}

Я сохраняю оповещение, как показано ниже:

Alert alert = new Alert();
alert.setUuid(uuid);
alert.setReading(reading);
if (alert.getPriority().equals("High") || alert.getPriority().equals("Low") || alert.getPriority().equals("Medium"))
alertRepository.save(alert);

Обновлены сведения 1:

  • Сначала я вставляю запись в таблицу оповещений в зависимости от условий,Затем я вставляю снова с новым идентификатором, сгенерированным автоматически, но с теми же параметрами оповещения (показания, приоритет), кроме метки времени.когда я сохраняю объект оповещения, как указано выше, все записи обновляются в базе данных.
  • Временная метка - это поле показаний
  • vin - это идентификатор для показаний

Обновление 2: Это так или иначе связано с сеансами?Ссылка вызов jpa persist на отдельном объекте не вставляет повторяющуюся строку.Почему?

Обновление 3: я думаю, это из-за способа создания объекта оповещения.Я использую слюни, правила Java и вставить строку.Я создал предупреждение как глобальное.Теперь я изменил это.

Ниже мое правило, где / как я должен создать сущность Оповещение в правилах для сохранения:

rule "engine RPM"
    when
        alert: Alert()
        reading: Reading()
        vehicle: Vehicle(getVin() == reading.getVin(), getRedlineRpm() < reading.getEngineRpm())
    then

        new Alert().setPriority("High");

    end

1 Ответ

0 голосов
/ 11 февраля 2019

Согласно документам гибернации при использовании аннотации @JoinColumn:

У него есть еще один параметр с именем referencedColumnName.Этот параметр объявляет столбец в целевом объекте, который будет использоваться для объединения.Обратите внимание, что при использовании referencedColumnName для столбца без первичного ключа связанный класс должен быть Serializable.

Убедитесь, что ваш класс serializable

...