删除一对一关系中的对象 约束冲突异常



我正在尝试删除作为关系所有者的实体,但我收到异常如下:

org.h2.jdbc.JdbcSQLException: Referential integrity constraint 违规:"FKS59BBPCYQ1GUKBWWA61TYF8YF:公开。国外预订 密钥 (CAR_LICENSE_ID( 引用公共。汽车(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);

我假设你正在扩展春季CrudRepository<Reservation, Long>

joinColumn 位于预留端,从我可以看到您要做的是删除预留。那么为什么不从拥有方删除它,这看起来像是保留。

将"预留"更改为。

@OneToOne(cascade = {CascadeType.PERSIST, CascadeType.REMOVE})

而是使用以下内容进行删除。

reservationRepository.delete(reservation);

这是一种双向关系。将此添加到类Car

public void removeReservation() {
if (this.reservation != null) {
this.reservation.setCar(null);
this.reservation = null;
}
}

呼叫car.removeReservation()

然后删除汽车。

最新更新