cascade属性: 指定级联操作的行为(可多选)

  • CascadeType.PERSIST级联新增(又称级联保存)
    获取A对象里也同时也重新获取最新的B时的对象。即会重新查询数据库里的最新数据,并且,只有A类新增时,会级联B对象新增。若B对象在数据库存(跟新)在则抛异常(让B变为持久态),对应EntityManager的presist方法,调用JPA规范中的persist(),不适用于Hibernate的save()方法
  • CascadeType.MERGE级联合并(又称级联更新)
    指A类新增或者变化,会级联B对象(新增或者变化) ,对应EntityManager的merge方法,调用JPA规范中merge()时,不适用于Hibernate的update()方法
  • CascadeType.REMOVE级联删除
    只有A类删除时,会级联删除B类,即在设置的那一端进行删除时,另一端才会级联删除,对应EntityManager的remove方法,调用JPA规范中的remove()时,适用于Hibernate的delete()方法
  • CascadeType.REFRESH级联刷新
    获取order(一或多)对象里也同时也重新获取最新的items(多)的对象,对应EntityManager的refresh(object),调用JPA规范中的refresh()时,适用于Hibernate的flush()方法
  • CascadeType.ALL
    包含所有持久化方法

综上:大多数情况用CascadeType.MERGE就能达到级联跟新又不报错,用CascadeType.ALL时要斟酌下CascadeType.REMOVE

举个栗子: 

多的一方: 

hibernate CascadeType属性说明_级联删除

少的一方: 

hibernate CascadeType属性说明_hibernate_02