2016-10-27 28 views
0

我對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)從邊界表你不

回答

0

刪除設備不必寫。設備表中的一對多的邊界足以處理它。

0

嘗試刪除:

(cascade=CascadeType.ALL, optional=false) 

從@ManyToOne邊境。我想你不想在刪除邊框(子)時刪除設備(父母)。另請加:

mappedBy="device" 

in @OneToMany註解在設備中。

相關問題