【问题标题】:OneToMany and ManyToOne annotations cause me problemsOneToMany 和 ManyToOne 注释给我带来了问题
【发布时间】:2016-10-27 13:43:18
【问题描述】:

我对 Spring Boot 有点陌生。我有一个带有数据库的小应用程序。数据库包含表 deviceborders。一个设备可以有多个边框,但一个边框只能有一个设备。我的问题是,当设备有一个或多个边框时,我无法从数据库中删除设备。如果设备没有边框,我可以去掉它。

这是我为设备表定义边框的方式。

@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


    【解决方案1】:

    从边框表中删除设备,您不必编写它。设备表中的一对多边框足以处理它。

    【讨论】:

      【解决方案2】:

      尝试删除:

      (cascade=CascadeType.ALL, optional=false)
      

      来自边界中的@ManyToOne。我认为您不想在删除边框(子项)时删除设备(父项)。同时补充:

      mappedBy="device"
      

      在设备中的@OneToMany注解中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-23
        • 1970-01-01
        • 1970-01-01
        • 2011-11-29
        • 2011-05-22
        • 2011-03-12
        • 2014-03-02
        • 1970-01-01
        相关资源
        最近更新 更多