我有两个实体使用oneToMany注释相互映射。一个实体是bookedBus,第二个是drivers驱动程序实体已经插入了一行,该行稍后将成为bookedBus 实体(PK) 的外部引用(FK)。下面是两个实体,为简洁起见,setter 和 getter 已被跳过。
第一个实体
@Entity
@Table(name = "bookedBuses")
public class BookedBuses implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "driver_id")
private Drivers driver;
}
第二实体
@Entity
public class Drivers implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "driver")
private List<BookedBuses> bookedBus;
}
现在,当我尝试保存到预订的巴士实体时,它会引发以下异常
org.springframework.dao.InvalidDataAccessApiUsageException:分离的实体传递给坚持:com.bus.api.entity.Drivers;嵌套异常是 org.hibernate.PersistentObjectException:分离的实体传递给坚持:com.bus.api.entity.Drivers
以下是我尝试保存到bookedBus 实体的方法
BookedBuses bookedRecord = new BookedBuses();
bookedRecord.setBookedSeats(1);
bookedRecord.setBookedBusState(BookedBusState.LOADING);
bookedRecord.setBus(busService.getBusByPlateNumber(booking.getPlateNumber()));
bookedRecord.setRoute(booking.getRoute());
infoLogger.info("GETTING DRIVER ID ======= " + booking.getDriver().getId());
Drivers drivers = new Drivers(booking.getDriver().getId());
List<BookedBuses> d_bu = new ArrayList<>();
drivers.setBooked(d_bu);
drivers.addBooked(bookedRecord);
bookedRecord.setDriver(drivers);
bookedBusService.save(bookedRecord);
My BookBusService 按要求保存方法
@Autowired
private BookedBusRepository bookedBusRepo;
public boolean save(BookedBuses bookedRecord) {
try {
bookedBusRepo.save(bookedRecord);
return true;
} catch (DataIntegrityViolationException ex) {
System.out.println(ex);
AppConfig.LOGGER.error(ex);
return false;
// Log error message
}
}
慕桂英546537
幕布斯7119047
相关分类