我對Spring Boot很有新意。我有一個有數據庫的小應用程序。數據庫包含表設備和邊界。一個設備可以有多個邊框,但一個邊框只能有一個設備。我的問題是,當它有一個或多個邊框時,我無法從數據庫中刪除設備。如果設備沒有任何邊框,我可以將其刪除。OneToMany和ManyToOne註釋會導致我的問題
這是我如何爲設備表定義邊界。
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinColumn(name="device_id")
private Collection<Borders> borders = new ArrayList<>();
這裏是我如何在邊界表定義的設備:
@ManyToOne(cascade=CascadeType.ALL, optional=false)
@JoinColumn(name="device_id", updatable=false)
private Device device;
下面是來自DeviceService級,其中設備應該被刪除我的方法。
@Transactional()
public Boolean deleteDevice(DeviceVM devParam) {
User user = getLoginUser();
return deviceRepository.findDeviceByUserIdAndName(user.getId(), devParam.getName())
.map(dev -> {
deviceRepository.delete(dev);
return true;
})
.orElse(false);
}
正如我剛纔所說,設備可以被刪除,當它沒有任何邊界,但有邊界,它不能。希望有人能幫助我。下面是錯誤消息我可以從服務器看到:
2016年10月26日16:31:16.092 ERROR 10016 --- [NIO-8080-EXEC-7] flkimionpomo.aop.logging.LoggingAspect: fi.jurt.kimionpomo.web.rest.DeviceResource.deleteDevice()中存在異常,原因='org.hibernate.exception.ConstraintViolationException:無法執行語句'和異常='無法執行語句; SQL [n/a];約束[null];嵌套異常是org.hibernate.exception.ConstraintViolationException:無法執行語句' org.springframework.dao.DataIntegrityViolationException:無法執行語句; SQL [n/a];約束[null];嵌套的例外是org.hibernate.exception.ConstraintViolationException:在org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException無法執行的語句 (HibernateJpaDialect.java:278)從邊界表你不