Playframework 2.0 播放框架2.0,删除OneTONE级联导致持久性异常

Playframework 2.0 播放框架2.0,删除OneTONE级联导致持久性异常,playframework-2.0,ebean,cascading-deletes,Playframework 2.0,Ebean,Cascading Deletes,我正在使用Play 2.0框架,我有三个类,患者,就诊和青春期患者和就诊有很多关系,而就诊和青春期有一对一的关系(我知道,这在数据库设计中是不好的做法,但是就诊有很多变量,我想把它们分开) 公共类患者{ @身份证 公共长id; @OneToMany(mappedBy=“patient”,cascade=CascadeType.ALL) 公开名单访问; } 公开课堂参观{ @身份证 公共长id; @多通(级联=级联类型.ALL) 公共病人; @OneTONE(mappedBy=“visit”,ca

我正在使用Play 2.0框架,我有三个类,
患者
就诊
青春期
<代码>患者和
就诊
有很多关系,而
就诊
青春期
有一对一的关系(我知道,这在数据库设计中是不好的做法,但是
就诊
有很多变量,我想把它们分开)

公共类患者{
@身份证
公共长id;
@OneToMany(mappedBy=“patient”,cascade=CascadeType.ALL)
公开名单访问;
}
公开课堂参观{
@身份证
公共长id;
@多通(级联=级联类型.ALL)
公共病人;
@OneTONE(mappedBy=“visit”,cascade={CascadeType.ALL})
公共青春期;
}
公共课青春期{
@身份证
公共长id;
@奥内托内
公众访问;
}
当我调用
patient.delete()
时,如果就诊时没有青春期,它可以正常工作,但如果就诊时有青春期信息,则会出现以下错误:

play.api.Application$$anon$1:执行异常[[PersistenceException:错误执行DML bindLog[]错误[Referential integrity constraint violation:“FK_青春期_数据_就诊_7:PUBLIC.青春期_数据外键(就诊ID)引用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] 在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] 在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_青春期_数据_就诊_7:PUBLIC.persistence_数据外键(就诊ID)引用PUBLIC.VISIT(ID)(100)”;SQL语句:\n从就诊中删除,其中ID=?和患者_ID=?[23503-168]] 在com.avaje.ebeanternal.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.ebeanternal.server.core.PersistRequestBean.executeNow(PersistRequestBean.java:489)~[avaje-ebeanorm-server.jar:na] 在com.avaje.ebeanternal.server.core.PersistRequestBean.executeOrQueue(PersistRequestBean.java:511)~[avaje-ebeanorm-server.jar:na] 在com.avaje.ebeanternal.server.persist.DefaultPersister.delete(DefaultPersister.java:635)~[avaje-ebeanorm-server.jar:na] 原因:org.h2.jdbc.JdbcSQLException:引用完整性约束冲突:“FK_青春期_数据_访问_7:PUBLIC.青春期_数据外键(访问_ID)引用PUBLIC.VISIT(ID)(100)”;SQL语句: 从id=?的访问中删除?患者id=?[23503-168] 在org.h2.message.DbException.getJdbcSQLException(DbException.java:329)~[h2.jar:1.3.168] 在org.h2.message.DbException.get(DbException.java:169)~[h2.jar:1.3.168] 在org.h2.message.DbException.get(DbException.java:146)~[h2.jar:1.3.168] 在org.h2.constraint.ConstraintReferential.checkRow(ConstraintReferential.java:414)~[h2.jar:1.3.168] 在org.h2.constraint.ConstraintReferential.checkRowRefTable(ConstraintReferential.java:431)~[h2.jar:1.3.168] 在org.h2.constraint.ConstraintReferential.checkRow(ConstraintReferential.java:307)~[h2.jar:1.3.168]

我怀疑这和“玩删除东西”的顺序有关,它试图在青春期前删除访问,有没有办法用cascade克服这个问题?或者我应该在visit中重写delete方法以自己指定它吗


请帮忙。。。谢谢你

试着问这个问题:我最终不是一个人,而是上了一堂很大的课。但是谢谢你的回答,我下次会试试的。
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;
}