Hibernate 5.2 удалить на каскаде на моих столах postgres - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть два класса, которые зависят друг от друга. и я хочу сделать каскадное удаление. проблема у меня следующая ошибка:

не удалось выполнить оператор; SQL [н / п]; ограничение [fk5o18odcs53r4t69hbgf35haj3]; вложенное исключение: org.hibernate.exception.ConstraintViolationException: не удалось выполнить оператор

public class Workspace {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", nullable = false, updatable = false)
    private Long id;

    @Column(name = "name", nullable = false, unique = true)
    private String name;

    private String description;

    @CreationTimestamp
    @Column(name = "created_at")
    private Date createdAt;

    @UpdateTimestamp
    @Column(name = "updated_at")
    private Date updatedAt;

    @OneToMany( fetch = FetchType.LAZY,cascade = CascadeType.REMOVE,orphanRemoval = true)
    private List<Project> projects;


    public void setId(Long id) {
        this.id = id;
    }

    public List<Project> getProjects() {
        return projects;
    }


    public void setProjects(List<Project> projects) {
        this.projects = projects;
    }

}
@Entity
@Table(name = "project")
public class Project {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", nullable = false, updatable = false)
private Long id;

@Column(name = "name", nullable = false)
private String name;

@ManyToOne(fetch = FetchType.LAZY)
private Workspace workspace;

private String description;

@CreationTimestamp
@Column(name = "created_at")
private Date createdAt;

@UpdateTimestamp
@Column(name = "updated_at")
private Date updatedAt;

Проблема в том, что таблицы, созданные с помощью моего JPA, не определяют каскадный тип в правилах удаления. Нужно ли определять типы ограничений напрямую с помощью sql? Может ли JPA Hibernate не определять эти ограничения?

1 Ответ

0 голосов
/ 13 сентября 2018

Необходимо указать параметр mappedBy для класса OneToMany класса Workspace.

@OneToMany( fetch = FetchType.LAZY,cascade = CascadeType.REMOVE,orphanRemoval = true, mappedBy = "workspace") 
private List<Project> projects;

И после этого вы можете удалить рабочее пространство, и все проекты также будут удалены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...