2016-10-27 19 views
0

私はSpring Bootで新しいものです。私はデータベースを持っている小さなアプリケーションを持っています。データベースにはテーブルの境界が含まれています。 1つのデバイスは多くの罫線を持つことができますが、1つの罫線は1つのデバイスしか持つことができません私の問題は、1つ以上の罫線がある場合、私はデータベースからデバイスを削除することができないということです。デバイスに罫線がない場合は、削除することができます。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:原因= '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

は国境をテーブルからデバイスを削除しますドンそれを書かなければならない。境界線のためのデバイステーブルの1対多はそれを扱うのに十分です。

(cascade=CascadeType.ALL, optional=false) 

を@ManyToOneから国境に:

0

は削除するようにしてください。私はあなたがボーダー(子供)を削除するときにデバイス(親)を削除したくないと思う。また、デバイスの@OneToManyアノテーションに、

mappedBy="device" 

のアノテーションを追加します。

関連する問題