spring - Spring data jpa:一对一关系
问题描述
我有传感器实体与位置实体有关系
@RequiredArgsConstructor
@Data
public class TemperatureSensor {
@Id
@GeneratedValue(strategy = AUTO)
private Long id;
private float temperature;
private float min;
private float max;
private float timeInterval;
private boolean activityState;
@OneToOne
private Location location;
}
@Entity
@Data
@RequiredArgsConstructor
public class Location {
@Id
@GeneratedValue(strategy = AUTO)
private Long id;
private Long coordinates;
private String name;
private EnvironmentState environmentState = EnvironmentState.NORMAL_CASE;
@OneToOne
private TemperatureSensor temperatureSensor;
}
我创建了两个端点来启动每个实体,因此我像这样使用 Postman 发送 Sensor 对象并在数据库中获取 location_id null。位置也是如此。
{
"temperature" : "15.2",
"min" :"9.0",
"max" : "20.0",
"timeInterval" : "552.5",
"activityState" : "true",
"location_id" :"1"
}
另外,我尝试发送位置对象,但出现异常:对象引用了未保存的瞬态实例 - 在刷新之前保存瞬态实例
{
"temperature" : "15.2",
"min" :"9.0",
"max" : "20.0",
"timeInterval" : "552.5",
"activityState" : "true",
"location" :{"coordinates": "123","name" : "loc01"}
}
解决方案
问题似乎是您在@OneToOne
注释上缺少级联选项。尝试@OneToOne(cascade = CascadeType.ALL)
改用(这会将所有操作 PERSIST、MERGE、REMOVE、REFRESH、DETACH 级联到另一个实体)。
@RequiredArgsConstructor
@Data
public class TemperatureSensor {
@Id
@GeneratedValue(strategy = AUTO)
private Long id;
private float temperature;
private float min;
private float max;
private float timeInterval;
private boolean activityState;
@OneToOne(cascade = CascadeType.ALL)
private Location location;
}
Entity
@Data
@RequiredArgsConstructor
public class Location {
@Id
@GeneratedValue(strategy = AUTO)
private Long id;
private Long coordinates;
private String name;
private EnvironmentState environmentState = EnvironmentState.NORMAL_CASE;
@OneToOne(cascade = CascadeType.ALL)
private TemperatureSensor temperatureSensor;
}
推荐阅读
- mongodb - 当 _id 动态生成时,mongoosastic 引用如何不起作用
- visual-studio - 简单的 void 方法有效,但协程抛出空引用异常
- python - 通过外键模型字段验证多对多模型的唯一性
- google-apps-script - 如何按包含特定标题的列对电子表格进行排序?
- ios - 以编程方式提供呼叫转移?
- python - Pandas - 遍历特定列中的行并找到空单元格
- typescript - 错误 TS5023:未知的编译器选项“resolveJsonModule”
- qt - 使用 QT 的 QJSEngine 时如何找到信号的“发送者”
- laravel - laravel http 客户端自定义数据
- python-3.x - python文件处理中的tell()如何工作