java - 级联不适用于使用 Spring Data JPA 存储库进行删除

标签 java spring hibernate jpa cascade

我在尝试删除包含不应发生的 OneToMany 关系的对象时遇到约束问题。我设置了 cascade = CascadeType.ALL,尝试添加特定于 Hibernate 的 @Cascade 注释,尝试重建一个新数据库,我什至在下面创建了最小示例失败。

Cannot delete or update a parent row: a foreign key constraint fails (`test-db`.`bar`, CONSTRAINT `FKdvoqij212wwl2bf14kwo55h55` FOREIGN KEY (`foo_id`) REFERENCES `foo` (`id`))

要级联的对象

@Entity
public class Bar {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @ManyToOne
    private Foo foo;

    // Constructor, getters and setters omitted
}

包含级联的类

@Entity
public class Foo {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @OneToMany(mappedBy = "foo", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<Bar> bars;

    // Constructor, getters and setters omitted
}

测试:

// Spring Data JPA Repositories (extend CrudRepository)
@Autowired private FooRepository fooRepository;
@Autowired private BarRepository barRepository;

@Test
public void test() {
    final Foo foo = new Foo();
    fooRepository.save(foo);

    final Bar bar = new Bar();
    bar.setFoo(foo);
    barRepository.save(bar);

    fooRepository.delete(foo);
}

上面的测试失败了。我希望能够删除 Foo 而不必删除所有关联的 Bar 对象,因为在 OneToMany 关系上设置了级联。为什么会失败?

最佳答案

试试 @OneToMany(mappedBy = "foo", cascade = CascadeType.ALL, orphanRemoval = true)

关于java - 级联不适用于使用 Spring Data JPA 存储库进行删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42399567/

相关文章:

javascript - 如何使用 Spring 响应下载 excel 文件

java - ModelMapper 在将实体转换为 DTO 时产生异常

java - java中的Long数据类型可以在循环语句中使用吗?

java - 了解spring @Configuration 类

java - 如何解决java中Set<Path>的Hibernate映射异常?

java - 在 thymeleaf 中使用 db 列作为 img src

java - 在 hibernate 中使用 join 时映射实体类

java - Hibernate 不创建我的表

java - 连接 MYSQL 和 netbeans 7.4

java - hazelcast 中的 TransactionContext,Ignite 中有类似的东西吗?