java - Spring Boot JPA .save() 更新所有记录
问题描述
我有一个实体类 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:这是否与会话有关?参考。在分离的实体上调用 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
解决方案
根据休眠文档,在使用 @JoinColumn 注释时:
它还有一个名为referencedColumnName 的参数。此参数声明将用于连接的目标实体中的列。请注意,将 referencedColumnName 用于非主键列时,关联的类必须是可序列化的。
确保您的课程可序列化
推荐阅读
- sql - 如何找出删除sql server用户Databse的用户的IP地址
- html - 如何在 html/css 中大写部分元素?
- swift - Swift - 测试与网站的连接和可用端口
- java - PDF 下载或意图
- apache-kafka - Prometheus 的 Kafka 性能指标
- c - 为什么 fprintf() 不写入文件?
- javascript - 将Vue添加到现有的旧网站,删除div而不是显示旧的html
- nativescript-vue - 有没有办法在 .vue 文件的模板部分使用 pug 编译器
- node.js - sh: 1: cross-env: laravel mix 的权限被拒绝
- python - 在 to_sql 之后打开空闲 Postgres 连接的熊猫?