spring - 删除 OneToOne 关系中的对象 ConstraintViolationException
问题描述
我正在尝试删除作为关系所有者的实体,但出现如下异常:
org.h2.jdbc.JdbcSQLException:参照完整性约束违规:“FKS59BBPCYQ1GUKBWWA61TYF8YF:PUBLIC.RESERVATIONS FOREIGN KEY(CAR_LICENSE_ID) REFERENCES PUBLIC.CARS(LICENSE_ID) ('EPA13S')”;SQL 语句:
我知道这是因为试图删除另一个对象使用 fk_key 引用的对象。这是我的模型:
public class Reservation
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotNull
@Enumerated(EnumType.STRING)
private DriverType driverType;
private LocalDateTime startTime;
private LocalDateTime stopTime;
@OneToOne(cascade = CascadeType.PERSIST)
private Car car;
private BigDecimal cost;
}
public class Car
{
@Id
@NonNull
@Size(min = 6, max = 6)
String licenseId;
@OneToOne(mappedBy = "car", cascade = CascadeType.REMOVE)
Reservation reservation;
}
我怎么可能处理这种情况?我想在预订结束时从停车场中删除汽车,因为我不需要它,并且许可证 id 为 pk_key 使得即使前一个已经结束,尝试插入带有即将到来的预订的新车也很容易受到攻击。
删除汽车:
carRepository.deleteByLicenseId(reservation.getCarLicenseId());
@Query("DELETE FROM Car c where c.licenseId = :licenseId")
void deleteByLicenseId(@Param("licenseId") String licenseId);
解决方案
我假设您正在扩展 SpringCrudRepository<Reservation, Long>
joinColumn 在 Reservation 端,据我所知,您想要做的也是删除 Reservation。那么为什么不从拥有方删除它,这看起来像保留。
将预订更改为。
@OneToOne(cascade = {CascadeType.PERSIST, CascadeType.REMOVE})
而是使用以下内容进行删除。
reservationRepository.delete(reservation);
推荐阅读
- python - Python - 将 for 循环变成单线
- reactjs - 当我运行 npm intall firebase 时出现此错误,我该如何解决
- css - 如何更改 Facebook Messenger 网站插件的 Z-index
- reactjs - 条形图不显示
- sql - 我想对日期时间列有不同的结果
- mysql - 无法在 drupal 8 中安装任何模块
- python - /update_item/ 'WSGIRequest' 对象的 AttributeError 没有属性 'data'
- swiftui - 为什么文本在加载动画时出现?
- spring - 我可以自动连接 Spring Cloud 中的所有可用频道吗?
- keras - keras 在大数据集上单独训练