@ManyToMany Нарушение ограничения ссылочной целостности при удалении

@ManyToMany Нарушение ограничения ссылочной целостности при удалении


У меня много отношений

  @ManyToMany(cascade = CascadeType.REMOVE, fetch = FetchType.EAGER)
    @JoinTable(
            name="tbl_settings_employees",
            joinColumns = @JoinColumn(name = "id"),
            inverseJoinColumns = @JoinColumn( name = "employee_id")
    )
    private Set<Employee> employeeSet;

что не позволяет мне удалить основной объект. другими словами, в моем случае я не могу удалить сотрудника из базы данных.

Для этого примера у меня есть 4 таблицы: таблица пользователей, таблица настроек, таблица settings_edit_employee_set и таблица сотрудников.

Это таблицы и отношения:

|---------|  |----------------------------|
| tbl_user|  | tbl_settings               | 
| --------|  | ---------------------------|
| Id (PK) |  | Id (PK)| user_id (PK ref tbl_user) 
|---------|  |----------------------------|
| 1       |  | 1      | 1                 |
| 2       |  | 2      | 2                 |
| 3       |  | 1      | 2                 |
| 4       |  | 2      | 1                 |
| etc     |  |etc     |etc                |
|---------|  |----------------------------|

|-------------------------------|
| tbl_settings_employees (pk=composite) 
| ------------------------------|
| Id (PK ref tbl_settings)      |
|        | Employee_ID(PK ref tbl_employee) 
|-------------------------------|
| 1      | 150                  |
| 1      | 149                  |
| 2      | 150                  |
| 2      | 151                  |
| etc    | etc                  |
|-------------------------------|

|-------------|
| tbl_employee| 
| ------------|
| Id PK       |
|-------------|
| 149         |
| 150         |
| 151         | 
| etc         | 
|-------------|

кратко:
я хочу удалить объект из своей базы данных, но не могу прямо сейчас; потому что это дает исключение нарушения ограничения ссылочной целостности:

org.h2.jdbc.JdbcSQLException: Referential integrity constraint violation: 
"FKE5EF0384FB556B15: PUBLIC.TBL_SETTINGS FOREIGN KEY(EMPLOYEE_EMPLOYEE_ID) REFERENCES 
PUBLIC.TBL_EMPLOYEE(EMPLOYEE_ID) (2)"; SQL statement:
delete from tbl_employee where bsn='234234234' [23503-166]

hql
person Ben    schedule 21.06.2012    source источник


Ответы (2)


Попробуйте с: cascade = CascadeType.DETACH

person Raul Guiu    schedule 04.09.2012

Была аналогичная проблема

@ManyToMany(targetEntity = DdoMaster.class)
    @Cascade(value = {CascadeType.DELETE, CascadeType.SAVE_UPDATE})
    @JoinTable(name = "acct_account_ddo_mapping", joinColumns = @JoinColumn(name = "fk_accountid", referencedColumnName = "pk_accountname"), inverseJoinColumns = @JoinColumn(name = "fk_ddoid", referencedColumnName = "pk_ddoid"))
    @RemoteProperty
    public Set<DdoMaster> getDdoMaster() {
        return ddoMaster;
    }

    public void setDdoMaster(Set<DdoMaster> ddoMaster) {
        this.ddoMaster = ddoMaster;
    }

теперь, удаляя строку из таблицы, она выдавала исключение Dataintegrity, просто сначала очистила набор, а затем удалила строку....

person Gaurav    schedule 04.03.2013