【发布时间】:2019-02-11 10:17:18
【问题描述】:
我有一个实体类 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
【问题讨论】:
-
@Embedded 和 @JoinColumn 不能一起工作。这是两种不同的方法。删除@Embedded :)
-
@EmilHotkowski 已删除,同样的问题。
-
我不明白你的错误,你能详细说明或提供一个例子吗?
-
首先我根据条件在alert表中插入一条记录。然后我使用自动生成的新 ID 再次插入,但使用相同的警报参数(读数、优先级),但时间戳除外。当我像上面一样保存警报对象时,所有记录都在数据库中得到更新。时间戳是一个读数字段。
-
@EmilHotkowski Errm 是
@Embedded和@ManyToOne不能一起使用。@JoinColumn与它有关。请参阅任何 JPA 映射文档
标签: java spring-boot jpa drools rule-engine