私は Play 2.0 フレームワークを使用しています。 と の 3 つのクラスがPatient
ありVisit
ますPuberty
。Patient
andVisit
は ManyToOne 関係を持ちますが、 Visit
andPuberty
は 1 対 1 の関係を持ちます (データベース設計の悪い習慣ですVisit
が、多くの変数があるため、それらを分離したいと思います)。
public class Patient{
@Id
public Long id;
@OneToMany (mappedBy="patient", cascade=CascadeType.ALL)
public List<Visit> visits;
}
public class Visit{
@Id
public Long id;
@ManyToOne (cascade=CascadeType.ALL)
public Patient patient;
@OneToOne(mappedBy="visit", cascade={CascadeType.ALL})
public Puberty puberty;
}
public class Puberty{
@Id
public Long id;
@OneToOne
public Visit visit;
}
訪問で思春期のないところを呼び出しpatient.delete()
たところ正常に動作しますが、訪問中の思春期情報がある場合、次のエラーが発生しました。
play.api.Application$$anon$1: 実行例外[[PersistenceException: DML 実行中にエラー bindLog[] エラー[参照整合性制約違反: "FK_PUBERTY_DATA_VISIT_7: PUBLIC.PUBERTY_DATA FOREIGN KEY(VISIT_ID) REFERENCES PUBLIC.VISIT(ID) (100) "; SQL ステートメント:\n id=? の訪問から削除します。患者ID=? [23503-168]]]] play.api.Application$class.handleError(Application.scala:289) で ~[play_2.10.jar:2.1.0] play.api.DefaultApplication.handleError(Application.scala: 383) [play_2.10.jar:2.1.0] at play.core.server.netty.PlayDefaultUpstreamHandler$$anon$2$$anonfun$handle$1.apply(PlayDefaultUpstreamHandler.scala:132) [play_2.10.jar:2.1 .0] で play.core.server.netty.PlayDefaultUpstreamHandler$$anon$2$$anonfun$handle$1.apply(PlayDefaultUpstreamHandler.scala:128) [play_2.10.jar:2.1.0] で play.api.libs. concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play_2.10.jar:2.1.0] at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise. scala:113) [play_2.10.jar:2.1.0] javax.persistence.PersistenceException: DML 実行中にエラー bindLog[] エラー[参照整合性制約違反: "FK_PUBERTY_DATA_VISIT_7: PUBLIC.PUBERTY_DATA FOREIGN KEY(VISIT_ID) REFERENCES PUBLIC.VISIT( ID) (100)"; SQL ステートメント:\n id=? の訪問から削除します。患者ID=? [23503-168]] com.avaje.ebeaninternal.server.persist.dml.DmlBeanPersister.execute(DmlBeanPersister.java:97) で ~[avaje-ebeanorm-server.jar:na] com.avaje.ebeaninternal.server で。 persist.dml.DmlBeanPersister.delete(DmlBeanPersister.java:48) ~[avaje-ebeanorm-server.jar:na] com.avaje.ebeaninternal.server.persist.DefaultPersistExecute で。executeDeleteBean(DefaultPersistExecute.java:109) ~[avaje-ebeanorm-server.jar:na] com.avaje.ebeaninternal.server.core.PersistRequestBean.executeNow(PersistRequestBean.java:489) ~[avaje-ebeanorm-server.jar :na] com.avaje.ebeaninternal.server.core.PersistRequestBean.executeOrQueue(PersistRequestBean.java:511) で ~[avaje-ebeanorm-server.jar:na] com.avaje.ebeaninternal.server.persist.DefaultPersister.delete で(DefaultPersister.java:635) ~[avaje-ebeanorm-server.jar:na] 原因: org.h2.jdbc.JdbcSQLException: 参照整合性制約違反: "FK_PUBERTY_DATA_VISIT_7: PUBLIC.PUBERTY_DATA FOREIGN KEY(VISIT_ID) REFERENCES PUBLIC.VISIT (ID) (100)"; SQL ステートメント: 訪問場所 id=? から削除 患者ID=? [23503-168] org.h2.message.DbException.getJdbcSQLException(DbException.java:329) ~[h2.jar:1.3 で。
思春期前に訪問を削除しようとする Play delete stuffs の順序と関係があると思われます。カスケードを使用してこれを克服する方法はありますか? または、訪問時に削除メソッドをオーバーライドして、自分で指定する必要がありますか?
助けてください...ありがとう