【发布时间】:2016-10-27 13:43:18
【问题描述】:
我对 Spring Boot 有点陌生。我有一个带有数据库的小应用程序。数据库包含表 device 和 borders。一个设备可以有多个边框,但一个边框只能有一个设备。我的问题是,当设备有一个或多个边框时,我无法从数据库中删除设备。如果设备没有边框,我可以去掉它。
这是我为设备表定义边框的方式。
@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 错误 10016 --- [nio-8080-exec-7] f.l.kimionpomo.aop.logging.LoggingAspect:fi.jurt.kimionpomo.web.rest.DeviceResource 中的异常。 deleteDevice() with cause = 'org.hibernate.exception.ConstraintViolationException: could not execute statement' and exception = 'could not execute statement; SQL [不适用];约束[空];嵌套异常是 org.hibernate.exception.ConstraintViolationException:无法执行语句' org.springframework.dao.DataIntegrityViolationException:无法执行语句; SQL [不适用];约束[空];嵌套异常是 org.hibernate.exception.ConstraintViolationException:无法执行语句 在 org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:278)
【问题讨论】:
标签: java spring hibernate one-to-many many-to-one