Java Spring Boot JPA.save()更新所有记录
我有一个实体类警报,当我创建一个新警报并保存它时,它会用匹配的参数替换所有行,警报实体中的读取和优先级可以重复。下面是Alert.class的代码。问题是什么Java Spring Boot JPA.save()更新所有记录,java,spring-boot,jpa,drools,rule-engine,Java,Spring Boot,Jpa,Drools,Rule Engine,我有一个实体类警报,当我创建一个新警报并保存它时,它会用匹配的参数替换所有行,警报实体中的读取和优先级可以重复。下面是Alert.class的代码。问题是什么 package com.github.entity; import javax.persistence.*; import java.util.UUID; @Entity public class Alert { @Id @GeneratedValue(strategy = GenerationType.IDENTI
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
rule "engine RPM"
when
alert: Alert()
reading: Reading()
vehicle: Vehicle(getVin() == reading.getVin(), getRedlineRpm() < reading.getEngineRpm())
then
new Alert().setPriority("High");
end
规则“发动机转速”
什么时候
警报:警报()
阅读:阅读()
车辆:车辆(getVin()=读取.getVin(),getRedlineRpm()
根据,使用@JoinColumn注释时:
它还有一个名为referencedColumnName的参数。此参数
在目标实体中声明将用于
参加请注意,对非主键使用referencedColumnName时
列,关联的类必须是可序列化的
确保类serializable@Embedded和@JoinColumn不能一起工作。这是两种不同的方法。删除@Embedded:)@EmilHotkowski已删除,同一问题。我不理解您的错误,您能否详细说明或提供exmaple?首先,我根据条件在警报表中插入一条记录。然后我再次插入一个自动生成的新ID,但除了时间戳之外,其他警报参数(读数、优先级)相同。当我像上面那样保存警报对象时,数据库中的所有记录都会更新。时间戳是一个读数字段。@EmilHotkowski Errm是
@Embedded
和@ManyToOne
不在一起的@JoinColumn
与此有关。有关保存对象集alert.setUuid(org.apache.commons.lang3.SerializationUtils.clone(uuid)),请参阅任何JPA映射文档:这有什么区别吗?我正在生成的id已经是唯一的。当您从db获取uuid并直接设置为新对象时,这将产生不同。