2016-10-27 6 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 간부 -7-] flkimionpomo.aop.logging.LoggingAspect 여기서 I는 서버에서 볼 수있는 에러 메시지이다 : cause = 'org.hibernate.exception.ConstraintViolationException : 문을'실행할 수 없습니다 '및 예외 ='문을 실행할 수 없습니다. 예외로 fi.jurt.kimionpomo.web.rest.DeviceResource.deleteDevice()에서 예외가 발생했습니다. 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

제거 장치 그것을 쓰지 않아도됩니다. 테두리를위한 장치 테이블의 일대 다 (one to many) 장치는 처리하기에 충분합니다.

0

봅니다 제거합니다 :

(cascade=CascadeType.ALL, optional=false) 

을 @ManyToOne에서 테두리. 테두리 (자식)를 삭제할 때 장치 (부모)를 삭제하지 않으려한다고 생각합니다. 또한 장치에 @OneToMany 주석에

mappedBy="device" 

의 내용을 추가하십시오.

관련 문제