2

我正在使用 Play 2.0 框架,我有三个类PatientVisitPuberty. Patient并且Visit有 ManyToOne 关系,而VisitandPuberty有一对一的关系(我知道,在数据库设计中这是不好的做法,但是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: ERROR execution DML bindLog[] error[参照完整性约束违规:“FK_PUBERTY_DATA_VISIT_7: PUBLIC.PUBERTY_DATA FOREIGN KEY(VISIT_ID) REFERENCES PUBLIC.VISIT(ID) (100) "; SQL 语句:\n 从访问中删除 where 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] 在 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.PUBBERTY_DATA FOREIGN KEY(VISIT_ID) REFERENCES PUBLIC.VISIT(身份证)(100)”;SQL 语句:\n 从访问中删除 where 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] at 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.PUBLIC.PUBBERTY_DATA FOREIGN KEY(VISIT_ID) REFERENCES PUBLIC.VISIT (ID) (100)"; SQL语句:delete from visit where id=? 和患者ID =?[23503-168] 在 org.h2.message.DbException.getJdbcSQLException(DbException.java:329) ~[h2.jar:1.3.

我怀疑它与播放删除东西的命令有关,它试图在青春期之前删除访问,有没有办法使用级联来克服这个问题?或者我应该在访问中覆盖我的删除方法以自己指定它?

请帮忙...谢谢

4

0 回答 0