Spring Boot JPA .save()更新所有记录

时间:2019-02-11 10:17:19

标签: java spring-boot jpa drools rule-engine

我有一个实体类Alert,当我创建一个新的ALert并保存它时,它用匹配的参数替换了所有行,Reading和Priority可以在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:

  • 首先,我根据条件在警报表中插入一条记录。然后 我再次插入了自动生成的新ID,但 相同的警报参数(读数,优先级),除了时间戳。当我 像上面保存所有记录一样,保存警报对象 在数据库中。
  • 时间戳记是一个读数字段
  • vin是阅读的ID

更新2:仍然与会话有关吗?参考calling jpa persist on detached entity does not insert duplicate row. Why?

更新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 :(得分:0)

根据hibernate docs,在使用@JoinColumn批注时:

  

它还有一个名为referencedColumnName的参数。这个参数   在目标实体中声明将用于   加入。请注意,当对非主键使用referencedColumnName时   列,关联的类必须是可序列化的。

确保您的课程可序列化