我有一个实体类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:
更新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
答案 0 :(得分:0)
根据hibernate docs,在使用@JoinColumn批注时:
它还有一个名为referencedColumnName的参数。这个参数 在目标实体中声明将用于 加入。请注意,当对非主键使用referencedColumnName时 列,关联的类必须是可序列化的。
确保您的课程可序列化