我有2个实体Company和Menu 公司有很多菜单。
公司实体:
public class Company {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL,mappedBy = "company")
private Set<Menu> menus;
//other fields getters and setters
菜单实体:
public class Menu {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.EAGER, optional = false)
@JoinColumn(name = "company_id", nullable = false)
private Company company;
//other fields getters and setters
当我删除公司时,它可以正常工作,通过菜单删除公司,但是我不能直接删除菜单:Api不会返回错误,但不会从数据库中删除记录。
服务:
public boolean deleteMenu(long id) throws ResourceNotFoundException {
try{
menuRepository.deleteMenuById(id);
return true;
}catch (Exception e){
throw e;
}
}
MenuRepository:
public interface MenuRepository extends CrudRepository<Menu, Long> {
public Menu findMenuById(Long id);
public void deleteMenuById(long id);
}
编辑
我猜问题是在这种情况下事务会回滚更改,所以我警告了这个错误: 事务默默回滚,因为它已被标记为仅回滚
答案 0 :(得分:0)
我认为您delete方法上的throws语句使您无法捕获实际引发的异常。throws ResourceNotFoundException
对您没有帮助。
第二,将您的层叠更改为cascade = CascadeType.REMOVE