Playframework 2.0 播放框架2.0,删除OneTONE级联导致持久性异常
我正在使用Play 2.0框架,我有三个类,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
患者
,就诊
和青春期
<代码>患者和就诊
有很多关系,而就诊
和青春期
有一对一的关系(我知道,这在数据库设计中是不好的做法,但是就诊
有很多变量,我想把它们分开)
公共类患者{
@身份证
公共长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;
}