0

@ManyToMany 参照整合性制約違反 ON DELETION


私はこの多対多の関係を得ました

  @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;

これにより、プライマリ オブジェクトを削除できません。つまり、私の場合、データベースから従業員を削除できません。

この例では、user テーブル、settings テーブル、settings_edit_employee_set テーブル、employee テーブルの 4 つのテーブルを取得しました。

これらはテーブルと関係です:

|---------|  |----------------------------|
| 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]
4

2 に答える 2

0

試してみてください:cascade = CascadeType.DETACH

于 2012-09-04T15:48:05.233 に答える
0

同様の問題がありました

@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;
    }

テーブルから行を削除しているときに、データ整合性例外がスローされました。最初にセットをクリアし、後で行を削除するだけです.... .

于 2013-03-04T12:54:09.737 に答える