3

私はJPA2(EclipseLink)を使用しており、エンティティオブジェクトは次のようになります。

@Entity
public class Dashboard
{
    @Id
    private String name;

    @OneToMany(cascade = CascadeType.ALL, mappedBy="dashboard", orphanRemoval = true)
    private List<LogResult> logResults;

    //getter-setters
}

@Entity
public class LogResult
{
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    private long id;

    private Dashboard dashboard;

    //getter-setters
}

ダッシュボードを削除するための次のようなコードがあります。

EntityManager em = PersistenceInitializer.newEntityManager();
em.getTransaction().begin();
em.remove(dashboard);
em.getTransaction().commit();

ただし、上記のコードを実行すると、logresultテーブルの外部キー制約に関するエラーメッセージが表示されます。

なんでそうなの?CascadeType.ALLを使用することは、私のために処理する必要があるすべてを意味しませんか?

ここでの更新は、コンソールでの実際のエラー出力です

Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`crs`.`logresult`, CONSTRAINT `FK_LOGRESULT_DASHBOARD_NAME` FOREIGN KEY (`DASHBOARD_NAME`) REFERENCES `dashboard` (`NAME`))
Error Code: 1451
4

2 に答える 2

0

EclipseLink の実装については、EclispeLink JPA 拡張ガイド ( http://eclipse.org/eclipselink/documentation/2.4/jpa/extensions/toc.htm ) を参照してください。

于 2012-12-04T22:53:42.927 に答える